无法使用hasManyThrough方法检索远程数据

时间:2016-06-22 17:19:30

标签: laravel eloquent relationship

为了举例,我有这样的设置:

item_model
    id - integer
    name - string

collected_item
    id - integer
    model_id - integer


posts
    id - integer
    collected_item_id - integer
    title - string

我想通过gather_item模型检索有关item_model的所有帖子。

所以我在item_model中设置了这样的关系:

public function posts()
    {
        return $this->hasManyThrough('App\Post', 'App\Collected_item');
    }

但是我该如何检索帖子?由于我正在寻找名字模型,我试过这样无济于事:

$posts = Item_model::where('model_name', 'LIKE', $q . '%')->posts();

$posts = Item_model::where('model_name', 'LIKE', $q . '%')->posts()->get();

返回错误:

调用未定义的方法Illuminate \ Database \ Query \ Builder :: posts()

3 个答案:

答案 0 :(得分:0)

尝试“with”方法..

$posts = Item_model::with('posts')->where('model_name', 'LIKE', $q . '%')->get();

仅获取帖子存在的item_models使用“has”方法

$posts = Item_model::has('posts')->where('model_name', 'LIKE', $q . '%')->get();

答案 1 :(得分:0)

我终于有了它的工作。这是Item_model

中的正确关系
public function posts()
    {
        return $this->hasManyThrough('App\Post', 'App\Collected_item', 'model_id', 'collected_item_id', 'id' );
    }

第三个参数是中间模型中的外键,第四个是Post Model上的外键,第五个是local(item_model)键。

之后没有预先加载我可以做的帖子:

$item= Item_model::find(220); (an item which I know has related posts)

$posts = $item->posts;

dd($posts);

这会返回帖子,所以你不得不像其他建议一样加载它们,hasManyThrough方法负责检索帖子。

答案 2 :(得分:-1)

我认为你必须在进行调用之前声明方法的名称

Item_model ::用( '信息') - >得到();