2017-04-21 47 views
0

我有這樣雄辯查詢生成器if語句執行

 SELECT 
      `id`, 
      `advert_id`, 
      IF(
       `chats`.`owner_id` = ?, 
       `chats`.`sender_id`, 
       `chats`.`owner_id` 
      ) AS `sender_id`, 
      IF(
       `chats`.`owner_id` = ?, 
       `chats`.`owner_access_time`, 
       `chats`.`sender_access_time` 
      ) AS `access_time`, 
      `created_time` 
     FROM 
      `chats` 
     WHERE 1 
      AND `id` = ? 
      AND `owner_id` = ? 
      AND `project_id` = ? 
     UNION 
     SELECT 
      `id`, 
      `advert_id`, 
      IF(
       `chats`.`owner_id` = ?, 
       `chats`.`sender_id`, 
       `chats`.`owner_id` 
      ) AS `sender_id`, 
      IF(
       `chats`.`owner_id` = ?, 
       `chats`.`owner_access_time`, 
       `chats`.`sender_access_time` 
      ) AS `access_time`, 
      `created_time` 
     FROM 
      `chats` 
     WHERE 1 
      AND `id` = ? 
      AND `sender_id` = ? 
      AND `project_id` = ? 
     ORDER BY `id` ASC 

查詢我試圖用雄辯的查詢生成器這樣

$chats = $database 
     ->table('chats') 
     ->where('sender_id', '=', $arguments['user_id']) 
     ->union(
      $database 
       ->table('chats') 
       ->where('owner_id', '=', $arguments['user_id']) 
       ->get(
        [ 
         'advert_id', 
         'owner_id', 
         'sender_id', 
         'id' 
        ] 
       ) 
     ) 
     ->get(
      [ 
       'advert_id', 
       'owner_id', 
       'sender_id', 
       'id' 
      ] 
     ); 

來實現它,但是我得到錯誤方法getBindings做不存在。,我也無法找到如何寫「if」子句與雄辯,我發現是方法,但據我瞭解,它只適用於「如果參數存在,添加附加子句到您的查詢」,什麼不是我需要的。

回答

0

解決方案

$chats = $database::table('chats') 
     ->where('sender_id', '?') 
     ->select(
      'id', 
      'advert_id', 
      $database::raw(' 
       IF(
        `chats`.`owner_id` = ?, 
        `chats`.`sender_id`, 
        `chats`.`owner_id` 
       ) AS `sender_id` 
      '), 
      $database::raw(' 
       IF(
        `chats`.`owner_id` = ?, 
        `chats`.`owner_access_time`, 
        `chats`.`sender_access_time` 
       ) AS `access_time` 
      ') 
     ) 
     ->setBindings(
      [ 
       $arguments['user_id'], 
       $arguments['user_id'], 
       $arguments['user_id'], 
      ] 
     ) 
     ->union(
      $database::table('chats') 
       ->where('owner_id', '?') 
       ->select(
        'id', 
        'advert_id', 
        $database::raw(' 
         IF(
          `chats`.`owner_id` = ?, 
          `chats`.`sender_id`, 
          `chats`.`owner_id` 
         ) AS `sender_id` 
        '), 
        $database::raw(' 
         IF(
          `chats`.`owner_id` = ?, 
          `chats`.`owner_access_time`, 
          `chats`.`sender_access_time` 
         ) AS `access_time` 
        ') 
       ) 
       ->setBindings(
        [ 
         $arguments['user_id'], 
         $arguments['user_id'], 
         $arguments['user_id'], 
        ] 
       ) 
     ) 
     ->get();