Laravel雄辩地在一对多关系表中搜索两个表

时间:2018-11-28 10:20:38

标签: eloquent laravel-5.7

我的两个表MemberDeposit之间存在一对多关系,一个成员在Deposit表中有多个存款,我都想通过多列进行搜索该表必须匹配。

这是我的Member

1.id,
2.branch_id,
3.village_id,
4.user_id,
5.name,
6.phone,
7.email,
8........

我的Deposit

1.meber_id,
2.user_id
3.deposit_date,
4.deposit_amount,
5.total_amount,
6..........

我的控制器代码

$depo = Deposit::with(['member'=>function($query){$query->where('branch_id',$request->branch_id)->where('status','running')->get();}])->where('user_id',$request->user_id)->whereDate('deposit-date','>=',$from_date)->whereDate('deposit-date','<=',$to_date)->get();

如果我这样做了,那么.... $query->where('branch_id',$request->branch_id)->get().....部分不起作用,请帮助我

2 个答案:

答案 0 :(得分:1)

尝试一下:

$depo = Deposit::whereHas('member', function($query) use ($request){
         $query->where([
                        ['branch_id' => $request->branch_id], 
                        ['status'=> 'running']
                       ])
                  })
         ->where('user_id',$request->user_id)
         ->whereDate([
                      ['deposit-date','>=',$from_date],
                      ['deposit-date','<=',$to_date]
                     ])->get();

答案 1 :(得分:0)

您的问题非常含糊,但是您似乎需要在use函数中$request with

$deposits = Deposit::with(['member' => function ($query) use ($request) {
    $query->where('branch_id', $request->branch_id)
        ->where('status', 'running')->get();
}])->where('user_id', $request->user_id)
    ->whereDate('deposit-date', '>=', $from_date)
    ->whereDate('deposit-date', '<=', $to_date)
    ->get();

但是with方法不会过滤您的查询,它只会限制所有存款返回的会员数量。它不在成员表中搜索。

更新04/12/2018

完全无需检查文档,完全不用担心。

Deposit::with('member', function($query) use($request){
    $query->where('branch_id', $request->branch_id)
        ->orWhere('village_id', $request->village_id)
})->where(function($query) use($request) {
    $query->where('user_id', $request->user_id)
        ->whereDate('deposit-date', '>=', $from_date)
        ->whereDate('deposit-date', '<=', $to_date)
})->orWhereHas('member', function($query) use($request){
    $query->where('branch_id', $request->branch_id)
        ->orWhere('village_id', $request->village_id)
})->get();