php - 如何在 php 中有条件地链接方法?

标签 php mysql

我有以下 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/

相关文章:

php - 更改 Boost Program Options 中的注释字符?

php - 从 MySQL 填充 PHP 销售表(包括空月)

PHP-从同一行的主键获取第二列值

php - 计算最后 10 行中有多少匹配项

php - 将参数传递给 Controller ​​总是得到 "Page Not Found"- CodeIgniter

php - 带有请求正文的 Laravel DELETE 方法

php - Ajax 不能与 Internet Explorer 一起正常工作

php - 从 MySQL 中选择多行

php - 在DB表上记录数据

mysql - 将大型 .sql 文件导入 MySQL