【问题标题】:With method and pivot table Laravel 5使用方法和数据透视表 Laravel 5
【发布时间】:2015-04-15 17:48:48
【问题描述】:

这是我获得项目和组的方式:

$groups = Group::with('projects')->get();

在我的project_group 数据透视表中有admin_id 字段,我需要检查该字段,例如只取项目和组where admin_id = 1,所以我需要取所有在数据透视表中归档的项目组等于 1。

这是在我的组模型中:

public function projects(){
        return $this ->belongsToMany('App\Project','project_group')->withPivot('admin_id');
        }

这是 1 组的示例,但不知道如何为所有组服用:

Group::find(1)->proejcts()->where('admin_id', '=',1)->get();

【问题讨论】:

    标签: php laravel-5


    【解决方案1】:

    这只会让您获得 admin_id = 1 的项目

    $groups = Group::with(['projects' => function($q){
        $q->where('admin_id', 1);
    }])->get();
    

    如果您也只想要具有admin_id = 1 的组,则需要添加whereHas 条件:

    $adminIdCondition = function($q){
        $q->where('admin_id', 1);
    };
    
    $groups = Group::with(['projects' => $adminIdCondition])
                   ->whereHas('projects', $adminIdCondition)
                   ->get();;
    

    关于第二种情况的更好的语法,请查看this other answer

    【讨论】:

    • 谢谢!你能告诉我这是做什么的吗: $adminIdCondition = function($q){ $q->where('admin_id', 1); };
    • 它将第一个代码示例的闭包存储在一个变量中,因为它必须传递给with()whereHas()。这样可以避免在代码中出现两次完全相同的函数。
    • 我在 $adminIdCondition 变量中得到什么结果?
    • 没有结果。是存储过滤函数的临时变量。
    • 啊哈它只是返回where闭包?
    猜你喜欢
    • 2015-09-10
    • 2015-08-09
    • 2016-03-09
    • 2015-09-21
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多