Reputation: 2505
I have two Models: 1. Course. 2. Fee.
One course has only one fee. While giving input it's completely ok but when I tried to access the fee data, it's showing nothing in fee's column . How do I solve it?
Course Model:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Course extends Model
{
protected $table='courses';
protected $fillable = ['name'];
public function fee(){
return $this->belongsTo('App\Fee');
}
}
Fee Model:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Fee extends Model
{
protected $table='fees';
protected $fillable = ['fee','course_id'];
public function course()
{
return $this->hasOne('App\Course');
}
}
Controller:
public function listofCourse(){
$course=\App\Course::all();
return view('listofCourse',compact('course'));
}
View Page:
<html>
<head>
<title> Course Details </title>
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
</head>
<body>
<div class="container">
<h3> Student Details </h3>
<table class="table table-striped table-bordered" id="example">
<thead>
<tr>
<td>Serial No</td>
<td>Course Name</td>
<td>Course Fee</td>
</tr>
</thead>
<tbody>
<?php $i=1; ?>
@foreach($course as $row)
<tr>
<td>{{$i}}</td>
<td>{{$row->name }}</td>
<td> @if($row->course)
{{$row->course->fee}}
@endif</td>
</tr>
<?php $i++; ?>
@endforeach
</tbody>
</table>
</div>
</body>
</html>
Upvotes: 2
Views: 15801
Reputation: 5135
It seems that you have written the relationship wrongly... just do this.
Keep in Mind, Course Has The Fee
means Course
is must, so relation should start from Course
side towards Fee
.
Your Course Model
class Course extends Model
{
protected $table='courses';
protected $fillable = ['name'];
public function fee(){
return $this->hasOne('App\Fee','course_id', 'id');
}
}
Your Fee Model
class Fee extends Model
{
protected $table='fees';
protected $fillable = ['fee','course_id'];
public function course()
{
return $this->belongsTO('App\Course', 'course_id', 'id');
}
}
Now you can get the relationship by doing this.
public function listofCourse(){
$course=\App\Course::with('fee')->get();
// doing this for dumping purpose
echo "<pre>";
print_r($course->toArray()); // you will see the `fee` array
echo "</pre>";
die();
return view('listofCourse',compact('course'));
}
Upvotes: 9