在laravel中传递要查询的联接数组

时间:2019-04-18 11:44:50

标签: mysql sql laravel join

我的查询有问题。我的示例查询如下

$answers = DB::table('IC2017_AY')
        ->join('IC2017', 'IC2017_AY.UNITID', '=', 'IC2017.UNITID')
        ->join('SFA1617_P1', 'IC2017_AY.UNITID', '=', 'SFA1617_P1.UNITID')
        ->join('cost', 'IC2017_AY.UNITID', '=', 'cost.UNITID')
        ->join('gpa', 'IC2017_AY.UNITID', '=', 'gpa.UNITID')
        ->join('enrollment', 'IC2017_AY.UNITID', '=', 'enrollment.UNITID')
        ->join('major', 'IC2017_AY.UNITID', '=', 'major.UNITID')
        ->join('preference', 'IC2017_AY.UNITID', '=', 'preference.UNITID')
        ->select('IC2017_AY.TUITION2 as in_state_tuition','IC2017_AY.FEE2 as in_state_fee','IC2017_AY.TUITION3 as out_state_tuition','IC2017_AY.FEE3 as out_state_fee','IC2017_AY.CHG4AY3 as books_supplies','IC2017_AY.CHG6AY3 as other_expenses','IC2017.ROOMAMT as room_charge','IC2017.BOARDAMT as board_charge','IC2017.RMBRDAMT as combined_charge','SFA1617_P1.SCUGRAD as total_receiving','SFA1617_P1.SCUGFFN as full_time_receiving','SFA1617_P1.UAGRNTN as total_receiving_grant')
        ->where($where_data);
        ->get();

但是现在我想传递连接数组,因为连接将在运行时确定,例如 下面的代码仅是示例。

$joins = [
['country', 'user_master.country_id', '=', 'country.country_id'],
['city', 'user_master.city_id', '=', 'city.city_id'],
['login_master', 'user_master.user_id', '=', 
'login_master.user_id'],
];

如何在laravel 5.8中执行此操作 预先感谢。!

1 个答案:

答案 0 :(得分:0)

例如,您可以使用foreach loop

$joins = [
['country', 'user_master.country_id', '=', 'country.country_id'],
['city', 'user_master.city_id', '=', 'city.city_id'],
['login_master', 'user_master.user_id', '=', 
'login_master.user_id'],
];

$answers = DB::table('IC2017_AY')
        ->join('IC2017', 'IC2017_AY.UNITID', '=', 'IC2017.UNITID')
        ->join('SFA1617_P1', 'IC2017_AY.UNITID', '=', 'SFA1617_P1.UNITID')
        ->join('cost', 'IC2017_AY.UNITID', '=', 'cost.UNITID')
        ->join('gpa', 'IC2017_AY.UNITID', '=', 'gpa.UNITID')
        ->join('enrollment', 'IC2017_AY.UNITID', '=', 'enrollment.UNITID')
        ->join('major', 'IC2017_AY.UNITID', '=', 'major.UNITID')
        ->join('preference', 'IC2017_AY.UNITID', '=', 'preference.UNITID');

foreach($joins as $key=>$value){
$answer = $answer->join(implode(",",$value));
}

return $answer->select('IC2017_AY.TUITION2 as in_state_tuition','IC2017_AY.FEE2 as in_state_fee','IC2017_AY.TUITION3 as out_state_tuition','IC2017_AY.FEE3 as out_state_fee','IC2017_AY.CHG4AY3 as books_supplies','IC2017_AY.CHG6AY3 as other_expenses','IC2017.ROOMAMT as room_charge','IC2017.BOARDAMT as board_charge','IC2017.RMBRDAMT as combined_charge','SFA1617_P1.SCUGRAD as total_receiving','SFA1617_P1.SCUGFFN as full_time_receiving','SFA1617_P1.UAGRNTN as total_receiving_grant')
        ->where($where_data);
        ->get();