Laravel 5.2:如何从一对一的雄辩(hasOne)关系中检索数据
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/36637037/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Laravel 5.2 : How to retrieve data from one to one eloquent (hasOne) Relationship
提问by User57
I have two Models: 1. Course. 2. Fee.
我有两个模型: 1. 课程。2. 费用。
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>
回答by Qazi
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
.
记住,Course Has The Fee
手段Course
是必须的,所以关系应该从Course
侧面开始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'));
}