Laravel属于仅返回id而不是整个对象

时间:2014-10-15 23:52:51

标签: php mysql laravel relationships

我的印象是,当我在模型中使用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的字符串

3 个答案:

答案 0 :(得分:1)

尝试:

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

其中'id'是专辑表

上相关列的名称

答案 1 :(得分:1)

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

因此,我以某种方式得到了这样:

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

答案 2 :(得分:1)

之所以获得ID,是因为您的外键字段与您的关系具有相同的名称。

因此,当您调用$ photo-> album时,您不是在触摸关联方法(作为动态属性),而是返回相册字段值,而该值恰好是id。

最好是将专辑字段重命名为album_id。

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

或者因为它遵循标准命名,所以您可以避免指定album_id

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