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 而不是整个对象的主要内容,如果未能解决你的问题,请参考以下文章
Laravel - 从 ajax 响应数据中的产品 (belongsTo) 访问子类别。