如何从Laravel 5.5的多态关系中检索数据?

时间:2017-12-12 02:39:48

标签: php laravel laravel-5

我是Laravel的新人。我正在根据documentation

开发一个Polymorphic Relations的演示版

我设置了3个表:

--Users
  --id
  --username
--Posts
  --id
  --summary
  --published
--Images
  --id
  --link
  --alt
  --image_id
  --image_type

App\Models\Users

public function scopeWithImages()
{
    return static::with('images')->get();
}

public function images()
{
    return $this->morphMany('App\Models\Images', 'image');
}

App\Models\Posts

public function scopeWithImages()
{
    return static::with('images')->get();
}

public function images()
{
    return $this->morphMany('App\Models\Images', 'image');
}

App\Models\Images

public function scopeWithUsers ()
{
    return static::with('users')->get();
}

public function users()
{
    return $this->morphedByMany('App\Models\Users', 'image');
}

public function posts()
{
    return $this->morphedByMany('App\Models\Posts', 'image');
}

我通过轻松调用UsersPosts模型获得了图片集 我是如何从Images模型获得用户和帖子的?我收到错误Unknown column 'images.images_id'

2 个答案:

答案 0 :(得分:2)

你的关系方法错了它应该是这样的

App\Models\Users

public function image()
{
    return $this->morphMany('App\Models\Images', 'image');
}

App\Models\Posts

public function image()
{
    return $this->morphMany('App\Models\Images', 'image');
}

App\Models\Images

public function image()
{
    return $this->morphTo();
}

方法名称应该是下划线image_id == image()

之前的列名

更喜欢 - https://laravel.com/docs/5.5/eloquent-relationships#polymorphic-relations

答案 1 :(得分:0)

首先,您的想法是不正确的,因为图像与用户和帖子之间的关系是一对多态的,在这种情况下,您只需要编写$user->images即可检索属于用户的图像或编写{{1 }}来获取帖子图片。

//但在您的代码中 您想让每个用户或帖子在您的senario中有很多可能是针对该用户或帖子的图像,而您$post->images则要检索一个帖子的图像

希望这项工作为您