【问题标题】:Laravel belongsTo only returns the id and not the entire objectLaravel belongsTo 只返回 id 而不是整个对象
【发布时间】: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');

标签: php mysql laravel relationships


【解决方案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');
      }
      

      【讨论】:

        猜你喜欢
        • 2020-07-04
        • 2020-09-08
        • 2016-07-30
        • 1970-01-01
        • 1970-01-01
        • 2013-05-20
        • 2021-06-11
        • 2019-11-09
        • 2022-11-11
        相关资源
        最近更新 更多