Laravel - 嵌套模型的条件

时间:2016-03-14 13:56:10

标签: laravel eloquent

我正在编写代码来获取Laravel中的嵌套对象。我想知道是否可以在hasMany或belongsTo中写条件。

这就是我正在做的事情,这使问题变得清晰:

$posts = Post::where(
            array(
                'status' => 'active'
            )
        )
        ->orderBy('id', 'asc')
        ->with(['postResponsibilities' => function($query){
            $query->where('status', 'active');
        }])
        ->with(['postRequirements' => function($query){
            $query->where('status', 'active');
        }])
        ->with(['postSalaries' => function($query){
            $query->where('status', 'active');
        }])
        ->skip($limit * ($page - 1))->take($limit)->get();

因此,我必须使用嵌套查询来获取状态 活动的记录。

在Post模型中,我写过:

public function postRequirements(){
    return $this->hasMany('App\Models\PostRequirement', 'post_id');
}

public function postResponsibilities(){
    return $this->hasMany('App\Models\PostResponsibility', 'post_id');
}

public function postSalaries(){
    return $this->hasMany('App\Models\PostSalary', 'post_id');
}

有没有办法可以在嵌套模型中定义状态条件? 所以我可以写:

$posts = Post::where(
            array(
                'status' => 'active'
            )
        )
        ->orderBy('id', 'asc')
        ->with('postResponsibilities')
        ->with('postRequirements')
        ->with('postSalaries')
        ->skip($limit * ($page - 1))->take($limit)->get();

我希望问题很明确,谢谢

2 个答案:

答案 0 :(得分:2)

您可以做的是将这些条件应用于您在Post模型上放置的关系方法中,例如:

class Post { public function postRequirements() { return $this->hasMany('App\Models\PostRequirement', 'post_id') ->where('status', 'active'); } }

答案 1 :(得分:0)

是的,可以急切加载多种关系。

请参阅:https://laravel.com/docs/master/eloquent-relationships#eager-loading

在你的情况下,它会是这样的:

Post::with('postResponsibilities', 'postRequirements', 'postSalaries')->where()....