Laravel无法使用一对多工作

时间:2016-04-11 14:18:07

标签: php laravel laravel-5 eloquent

我在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)

2 个答案:

答案 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');
}