我在Laravel中遇到过一对多关系的问题。我无法从数据库中检索我的数据。我的代码如下。
Doctor.php
public function cities()
{
return $this->belongsTo('App\City');
}
City.php
public function doctor()
{
return $this->hasMany('App\Doctor');
}
查看
@foreach($doctors as $doctor)
<tr>
<td data-title="ID">{{ $doctor->id }}</td>
<td data-title="Name">{{ $doctor->name }}</td>
<td data-title="Hospital">{{ $doctor->hospital }}</td>
<td data-title="Designation">{{ $doctor->designation }}</td>
<td data-title="City">{{ $doctor->cities->name }}</td> <!-- problem in this line -->
</tr>
@endforeach
当我尝试查看数据时,显示错误:
3d7f581c490d492093e6e73f8ebd29525504e56b.php第46行中的ErrorException:
尝试获取非对象的属性(查看:D:\ xampp \ htdocs \ tourisms \ root \ resources \ views \ doctors \ index.blade.php)
答案 0 :(得分:2)
在关系的belongsTo
侧,如果未指定外键名称,则使用关系名称构建外键名称。在这种情况下,由于您的关系名为cities
,因此Laravel会查找字段doctors.cities_id
。
如果您的外键不是cities_id
,那么您需要更改关系方法的名称,或指定外键的名称:
public function cities() {
return $this->belongsTo('App\City', 'city_id');
}
// or, better:
public function city() {
return $this->belongsTo('App\City');
}
另外,正如@Christophvh所提到的,你的人际关系的命名有点偏,但在程序上不正确。当belongsTo
/ hasOne
关系命名为单数时,它更有意义,更具可读性,belongsToMany
/ hasMany
关系被命名为复数。
答案 1 :(得分:1)
您正在尝试循环Collection而不是数组。
2个解决方案:
1) add - &gt; get();当你在控制器中呼叫你的关系时
2)
使用
@foreach($doctors->all() as $doctor)
而不是
@foreach($doctors as $doctor)
也是一个快速提示: 你的命名并不能说明你在做什么。你应该像下面这样交换它们。 &#39;医生属于城市&#39; &安培; &#39;一个城市有很多医生&#39;
<强> Doctor.php 强>
public function city()
{
return $this->belongsTo('App\City');
}
<强> City.php 强>
public function doctors()
{
return $this->hasMany('App\Doctor');
}