我在laravel 4应用程序中设置的关系有问题。我有两个表,事件和事件类型。我试图访问事件显示和索引页中的事件类型名称,但出现错误
Undefined property: Illuminate'Database'Eloquent'Relations'BelongsTo::$name
我的模型是
class Event extends Eloquent {
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'events';
public function eventtype() {
return $this->belongsTo('EventType');
}
}
class EventType extends Eloquent {
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'event_types';
public function events() {
return $this->hasMany('Event');
}
}
在我看来我有
{{ $event->eventtype()->name }}
,但这会导致上面的错误。
当我试图使用
{{ $event->eventtype()->first()->name }}
或
{{ $event->eventtype->first->name }}
我得到一个错误
Trying to get property of non-object
我是否需要访问EventController@show中的EventType,或者是否有数据透视表需要能够在事件显示视图中实现访问事件类型名称?
您可以尝试这样做:
$event = Event::with('eventtype')->find(1);
$event->eventtype->name;
或者对于多个事件:
$event = Event::with('eventtype')->get();
$event->first()->eventtype->name;
找到问题。在我的事件表中,事件类型列名是event_type_id。我将其更改为eventtype_id,它正在工作。
首先检查相关模型是否存在,并且只有在获得模型属性之后!
@if ( $event->eventtype )
{{ $event->eventtype->name }}
@endif
当你调用$event->eventtype()作为函数时,这不会给你一个模型,它会给你QueryBuilder,你可以使用它:
$some_events = $event->eventtype()->whereType('some_type')->get();
它给你一个模型集合。使用属性样式调用来获取模型。好运!