我有以下 php 代码,我想知道是否可以有条件地链接方法。如果角色为空或空 ([]),我无法调用 whereIn。这行得通,但是有没有更简洁的方法呢?
if ($params['roles']){
$query1 = QB::table('personnel_role')
->select(QB::raw('IF(personnel.nickname != "",CONCAT(IFNULL(personnel.first_name,"")," ", IFNULL(personnel.last_name, ""), " (",personnel.nickname,")"), CONCAT(IFNULL(personnel.first_name,"")," ", IFNULL(personnel.last_name,""))) AS "name", personnel.id'))
->leftJoin('personnel', 'personnel_role.personnel_id', '=', 'personnel.id')
->whereIn('personnel_role.role_id', $params['roles'])
->groupBy('personnel.id')->limit($params['skip'])
->offset($params['start']);
}else{
$query1 = QB::table('personnel_role')
->select(QB::raw('IF(personnel.nickname != "",CONCAT(IFNULL(personnel.first_name,"")," ", IFNULL(personnel.last_name, ""), " (",personnel.nickname,")"), CONCAT(IFNULL(personnel.first_name,"")," ", IFNULL(personnel.last_name,""))) AS "name", personnel.id'))
->leftJoin('personnel', 'personnel_role.personnel_id', '=', 'personnel.id')
->groupBy('personnel.id')
->limit($params['skip'])
->offset($params['start']);
}
最佳答案
因为除了 whereIn
之外,您的查询基本上是相同的,所以您可以在条件中单独添加它。
$query1 = QB::table('personnel_role')
->select(QB::raw('IF(personnel.nickname != "",CONCAT(IFNULL(personnel.first_name,"")," ", IFNULL(personnel.last_name, ""), " (",personnel.nickname,")"), CONCAT(IFNULL(personnel.first_name,"")," ", IFNULL(personnel.last_name,""))) AS "name", personnel.id'))
->leftJoin('personnel', 'personnel_role.personnel_id', '=', 'personnel.id')
->groupBy('personnel.id')->limit($params['skip'])
->offset($params['start']);
if($params['role']) {
$query1 = $query1->whereIn('personnel_role.role_id', $params['roles']);
}
关于php - 如何在 php 中有条件地链接方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45867698/