2017-03-29 4 views
1

私はLaravelが提供するEloquent ORMを使用しています。私は Laravel:複数のテーブルを使用する場所を実行

仕事乗員テーブルがpocket_money列を呼びかけているとジョブテーブルがincomeという列を持っている3機種

  • ハウス
  • 乗員
  • を持っています。乗員は、彼らの収入+ pocket_moneyの合計が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); 
    
+0

代わりに左結合を使用してください。 'With'は別のサブクエリです。 – aynber

答えて

0

この

$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); 

を試みるが、それがお役に立てば幸いです。 (ただし、テストされていません)

関連する問題