Laravel-belongsTo只返回id,而不返回整个对象


Laravel belongsTo only returns the id and not the entire object

我的印象是,当我在模型中使用belongsTo关系时,它会返回对象,但我似乎只得到id。这应该发生吗?这样做的好处是什么?

这是我的代码:

从我的照片模型

public function album()
{
    return $this->belongsTo('Album', 'album');
}

还有我的PhotosController

$photo = Photo::find($id);
$album = $photo->album;
return 'albums/' . $album->folder . '/thumbs/' . $photo->file;

不要介意退货,这只是为了测试。我得到一个错误:

Trying to get property of non-object

var_dump()显示我得到的只是一个带有专辑id 的字符串

您获得id是因为您的外键字段与您的关系具有相同的名称。

因此,当您调用$photo->album您没有触摸relation方法(作为动态属性),而是返回album字段值,该值恰好是id。

最好将album字段重命名为album_id。

public function album()
{
    return $this->belongsTo('Album', 'album_id');
}

或者,由于它遵循标准命名,您可以避免指定album_id

public function album()
{
    return $this->belongsTo('App'Album');
}

尝试:

return $this->belongsTo('Album', 'album', 'id');

其中"id"是相簿表上关联列的名称

我也遇到了同样的问题。我仍然无法解释发生了什么。如果你转储photo,我想你会在关系中得到相册的id和相册对象。

因此,我不知怎么得到了这样的结果:

$album = $photo->album()->first();