Php Laravel:使用多个表在何处执行

Php Laravel:使用多个表在何处执行,php,laravel,eloquent,Php,Laravel,Eloquent,我正在使用Laravel提供的雄辩的ORM,我想在两张桌子上执行一个where。我有三种型号 房子 居住者 工作 “占用者”表有一个名为“零花钱”的列,而“工作”表有一个名为“收入”的列。居住者可以有多个工作,因此我想选择其收入+零用钱之和大于X的所有居住者。因此原始查询为 select occupants.* from occupants o, jobs j where o.pocket_money + sum(j.income) > X and o.occupant_id =

我正在使用Laravel提供的雄辩的ORM,我想在两张桌子上执行一个where。我有三种型号

  • 房子
  • 居住者
  • 工作
“占用者”表有一个名为“零花钱”的列,而“工作”表有一个名为“收入”的列。居住者可以有多个工作,因此我想选择其收入+零用钱之和大于X的所有居住者。因此原始查询为

select occupants.* 
from occupants o, jobs j 
where o.pocket_money + sum(j.income) > X
and o.occupant_id = j.occupant_id
这是我目前所拥有的,但它不起作用,因为当它执行查询时,占用者表不可用

$occupants = House::with(["occupants", "occupants.jobs" => function($query) {
    $query->where('occupants.pocket_money + sum(jobs.income)', '>', 1000);
}])->find($house_id);
试试这个

$occupants = House::with(["occupants.jobs", "occupants" => function($query) {
     $query->leftJoin('jobs','jobs.occupant_id','=','occupants.id')
           ->select("occupants.*")
           ->whereRaw('occupants.pocket_money + sum(jobs.income) > 1000')
 }])->find($house_id);
希望能有帮助。(但未测试)

试试这个

$occupants = House::with(["occupants.jobs", "occupants" => function($query) {
     $query->leftJoin('jobs','jobs.occupant_id','=','occupants.id')
           ->select("occupants.*")
           ->whereRaw('occupants.pocket_money + sum(jobs.income) > 1000')
 }])->find($house_id);

希望能有帮助。(但未测试)

请改用左连接<代码>With是一个单独的子查询。请改用左联接<代码>With是一个单独的子查询。