Преобразовать в запрос Laravel

#laravel

#laravel

Вопрос:

У меня есть запрос для запроса данных. Это документ.

 "SELECT        
     zk_z_hako * CASE WHEN  zk_n_iri>  0 THEN zk_n_iri ELSE 1 END
     zk_z_bara 
   - ifnull(
                sum(
                        ns_hako 
          * CASE WHEN  zk_n_iri>  0 THEN zk_n_iri ELSE 1 END                
                  * CASE WHEN  ns_tr_kbn in (0,6) OR ( ns_tr_kbn = 1 AND ns_ns_kbn = 7) THEN 1
                         WHEN  ns_tr_kbn in (1,7)                                       THEN (-1)
                 ELSE  0
                        END
                     ns_bara
                  *  CASE WHEN  ns_tr_kbn in (0,6) OR ( ns_tr_kbn = 1 AND ns_ns_kbn = 7) THEN 1
                          WHEN  ns_tr_kbn in (1,7)                                       THEN (-1)
                  ELSE  0
                        END )
                ,0 )  AS TOTAL_BARA
FROM    t_table1
LEFT JOIN t_table2
                ON        ns_kno = zk_kno
AND         ns_show_flg = 0
AND     ns_ymd > 'Date param'      
WHERE        zk_kno = Value param;   
  

Так что я не мастер Laravel. Теперь мне нужно преобразовать этот запрос для работы с laravel. Кто-нибудь может мне помочь?

И я должен попробовать этот запрос.

 $squery = 'zk_z_hako * CASE WHEN  zk_n_iri>  0 THEN zk_n_iri ELSE 1 END
     zk_z_bara 
    ifnull(
                sum(
                        ns_hako 
          * CASE WHEN  zk_n_iri>  0 THEN zk_n_iri ELSE 1 END                
                  * CASE WHEN  ns_tr_kbn in (0,6) OR ( ns_tr_kbn = 1 AND ns_ns_kbn = 7) THEN 1
                         WHEN  ns_tr_kbn in (1,7)                                       THEN (-1)
                 ELSE  0
                        END
                     ns_bara
                  *  CASE WHEN  ns_tr_kbn in (0,6) OR ( ns_tr_kbn = 1 AND ns_ns_kbn = 7) THEN 1
                          WHEN  ns_tr_kbn in (1,7)                                       THEN (-1)
                  ELSE  0
                        END )
                ,0 )  AS TOTAL_BARA ';
        $param1= '20160310';
        $param2= '1972640100';
        $results = DB::table('table1')
          ->select($squery)
        ->leftJoin('table2', function($join) use ($param1)
            {
                $join->on('table1.ns_kno', '=', 'table2.zk_kno');
                $join->on('table1.ns_show_flg', '=', DB::raw(0));
                $join->on('ns_ymd','>',DB::raw("'".$param1."'"));
            })
        ->where('zk_kno', DB::raw($param2))
        ->toSql()
  

Но это возвращает sql

 "select `zk_z_hako` as `CASE` from `t_zaikmst` left join `t_nsyutrn` on `t_nsyutrn`.`ns_kno` = `t_zaikmst`.`zk_kno` and `t_nsyutrn`.`ns_show_flg` = 0 and `ns_ymd` > '20160310' where `zk_kno` = 1972640100"
  

я не уверен, что это правда.

Комментарии:

1. Да, у меня проблема с командой выбора. Итак, как преобразовать select. это кажется сложным.

2. Прежде всего, вы не можете добавлять case, when ->select() , для этого вы должны использовать DB::raw() . В функции выбора вам просто нужно добавить атрибуты.

3. я понимаю. я проверю больше

Ответ №1:

Если вы хотите сделать пользовательский выбор, вам нужно использовать необработанные запросы в качестве select параметра, подобного этому:

 ->select(DB::raw($squery))