記錄一個laravel中閉合orwhere和when的例子
阿新 • • 發佈:2018-12-17
想要查詢的情況
SELECT * FROM orders AS o JOIN orders_extend oe ON o.`id` = oe.`order_id`
WHERE (o.`seller_id` = 1 AND o.`order_status` = 'shipments' AND oe.`delivery_phone`= '15088888888') OR
(o.`order_status` = 'pay' AND o.`seller_id` = 1)
laravel/lumen
public function getAssOrderList($sellerId ,$assId,$assPhone)
{
//判斷當前人員是否是管理員
$ass = new SellerAssistants();
$boolMaster = $ass->where([
['seller_id','=',$sellerId],
['assistant_id','=',$assId],
['status','=','1']
])->value('is_master');
$oT = Orders::TABLE_NAME;
$o_eT = OrderExtend::TABLE_NAME;
$model = new Orders();
$orderIds = $model->join($o_eT,$oT.'.id','=',$o_eT.'.order_id')
->where(function ($query) use ($sellerId,$oT,$o_eT,$assPhone,$boolMaster){
$query->where([
[$oT.'.seller_id' ,$sellerId],
[$oT.'.order_status',Orders::STATUS_SHIPMENTS],
])->when(!$boolMaster,function ($query2) use ($oT,$o_eT,$assPhone){
return $query2->where($o_eT.'.delivery_phone',$assPhone);
});
})->orWhere(function ($query)use($oT,$sellerId){
$query->where($oT.'.order_status',Orders::STATUS_PAY)
->where($oT.'.seller_id',$sellerId);
})->pluck($oT.'.id')->toArray();
return $orderIds;
}