我试图在两个名为Wards and Beds的模型之间建立关系。病房的表结构是
id | ward_naem| ward_type 1 | ENT | male 2 | Heart | male
床位是
id | ward_name| ward_id 1 | 3 | 1 2 | 3 | 1 2 | 2 | 2
床模型中的关系是
public function wards()
{
return $this->belongsTo('Wards');
}
关系是Wards模型
public function beds()
{
return $this->hasMany('Beds');
}
在我的控制器中,我正在写这些行
public function index()
{
$beds = Beds::all();
return \Illuminate\Support\Facades\View::make('adminipd.index',compact('beds'));
}
当它重定向到名为beds
的对象的索引时,我正在使用ward_name
的对象检索$beds
<td>{{{ $bed->wards()->ward_name}}}</td>
<td>{{{ $bed->bed_no }}}</td>
它不起作用,如果我删除此行,则会显示空白页
<td>{{{ $bed->wards()->ward_name}}}</td>
它适用于“bed_no”。在我的laravel项目的日志文件中,我收到了一个错误
错误:异常'ErrorException',消息'Undefined property:Illuminate \ Database \ Eloquent \ Relations \ BelongsTo :: $ ward_name'
答案 0 :(得分:0)
错误是因为您使用wards()
括号,它将返回关系而不是数据本身。使用ward
而不使用括号。
而且在你的wards
表中,你有一个错字。 ward_naem
应为ward_name
然后将您的Bed
模型更改为此
public function ward() // changed from wards to ward
{
return $this->belongsTo('Wards');
}
或者
public function wards()
{
return $this->belongsTo('Wards', 'ward_id'); // added the key
}
然后你就可以得到所有床位,如下所示。这不是必要的,但对性能有好处。
$beds = Beds::with('ward')->get();
然后您可以访问以下床名。
{{ $bed->ward->ward_name }}
答案 1 :(得分:0)
从
更改代码 <td>{{{ $bed->wards()->ward_name}}}</td>
到
<td>{{{ $bed->wards->ward_name}}}</td>
实际上,您应该将 wards()方法重命名为 ward()以获得清晰,因为您获得的是一个实例而不是实例,因为它属于关系。