错误:异常'ErrorException',消息'Undefined property:Illuminate \ Database \ Eloquent \ Relations \ BelongsTo :: $ ward_name'

时间:2015-06-11 07:10:20

标签: php laravel-4 orm eloquent belongs-to

我试图在两个名为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'

2 个答案:

答案 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()以获得清晰,因为您获得的是一个实例而不是实例,因为它属于关系。