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

Posted

技术标签:

【中文标题】Laravel belongsTo 只返回 id 而不是整个对象【英文标题】:Laravel belongsTo only returns the id and not the entire object 【发布时间】:2014-12-11 05:02:24 【问题描述】:

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

这是我的代码:

来自我的照片模型

public function album()

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

还有我的照片控制器

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

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

Trying to get property of non-object

var_dump() 表明我得到的只是一个带有专辑 ID 的字符串

【问题讨论】:

你的人际关系有问题。尝试确保您引用了正确的 local_key 和 parent_key .. $this->belongsTo('Album', 'local_key', 'parent_key'); 【参考方案1】:

试试:

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

其中 'id' 是专辑表中相关列的名称

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

您获得 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');

【讨论】:

以上是关于Laravel belongsTo 只返回 id 而不是整个对象的主要内容,如果未能解决你的问题,请参考以下文章

如果 id 不为 null 则返回,laravel 雄辩

Laravel - 从 ajax 响应数据中的产品 (belongsTo) 访问子类别。

Laravel belongsTo 详解

如何在laravel中定义多个belongsTo

Laravel Eloquent,返回带有“belongsTo”对象的 JSON?

Laravel:将具有关系belongsTo的数组分解到模型