代码之家  ›  专栏  ›  技术社区  ›  BlackPearl

Laravel中的内部Where查询

  •  0
  • BlackPearl  · 技术社区  · 6 年前

    我做不到,也许我还是不明白。

    //get the Schools of the local government selected
            $churchs = Church::with(['confirmed' => function($q){ $q->where('status', 1);}])
                             ->where('state_id', request('state'))->get();
            return response()->json(['churchs' => $churchs]);
    

    我也有这种关系

     public function confirmed() {
        return $this->hasOne(Confirmed::class, 'church_id', 'id');
    }
    

    这个约束 $q->where('status', 1) 执行上述查询时不生效。虽然没有错误,但我得到的教会名单,其地位也是0,这是不可能的。

    我需要一个简单的解释如何去做,谢谢。

    1 回复  |  直到 6 年前
        1
  •  1
  •   IndianCoding    6 年前

    with() 只有热切的关系。内部条件语句 () 只筛选关系结果,而不筛选基本模型(表)的结果。你的问题看起来是:把所有教堂都搬到他们那里,只需要确认 status=1 .

    要按关系的列值筛选基表结果,应使用 whereHas() whereDoesntHave() 方法。

    $churchs = Church::whereHas('confirmed', function($query){
            $query->where('status', 1);
        })
        ->where('state_id', request('state'))
        ->get();