【问题标题】:Laravel - condition on nested modelsLaravel - 嵌套模型的条件
【发布时间】:2016-03-14 22:18:52
【问题描述】:

我正在编写代码来获取 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();

所以,我必须使用嵌套查询来仅获取那些 statusactive 的记录。

在 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();

希望问题清楚,谢谢

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      是的,可以预先加载多个关系。

      见:https://laravel.com/docs/master/eloquent-relationships#eager-loading

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

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

      【讨论】:

        猜你喜欢
        • 2021-06-05
        • 1970-01-01
        • 2014-05-02
        • 1970-01-01
        • 2015-11-17
        • 2023-03-08
        • 2018-11-07
        • 2012-12-10
        • 1970-01-01
        相关资源
        最近更新 更多