Laravel属于有条件和急切负荷

我有一个与模型相关联的Post模型,它依赖于一个额外的条件来工作:

<?php
class Post extends Base
{
    public function section()
    {
        return $this->belongsTo('App\Models\Section', 'id_cat')->where('website', $this->website);
    }
}

当我想要检索帖子并获取它的相关部分时,我可以这样做:

$post = Post::first();
echo $post->section->name; // Output the section's name

但是,当尝试使用急切负载获取该部分时:

Post::with(['section'])->chunk(1000, function ($posts) {
    echo $post->section->name;
});

Laravel抛出以下异常:

PHP error:  Trying to get property of non-object

当我对上面的eager load查询返回的Post对象进行调试时,我注意到section关系为null.
请注意,如果我从belongsTo关联中删除条件,它工作正常.

你们有什么想法为什么会这样吗?

最佳答案 正如我的评论中所提到的,不应该在关系定义中使用.因此,你的关系定义很好

public function section()
{
    return $this->belongsTo('App\Models\Section', 'id_cat');
}

你可以用这种方式急切加载(不用chunk等给出确切的查询)

Post::with(['section' => function ($query) use ($request) {
    $query->where('website', $request['website'])
}])->get()->first();

即,当您在请求中传递变量网站或以类似方式使用任何其他变量时.

我希望这可以解释.如果有任何不清楚的地方请添加评论.

点赞