mysql - Yii2 Wrong active record Query syntax in debug toolbar -


i made query active records , not work data query grid view empty. try manually, result ok. , found , found cause of problem, compare wrong sql query see code below.

active record query :

    $query-> innerjoinwith(['askpos'])           ->andwhere(['ask_policy.id'=>'ask_po.id_policy'])           ->innerjoinwith(['client'])->andwhere(['id_client'=>yii::$app->user->identity->id_client])->all();    **in yii debug show me sql  : ** `select `ask_policy`.* `ask_policy` inner join `ask_po` on `ask_policy`.`id` = `ask_po`.`id_policy` inner join `ask_client` on `ask_policy`.`id_client` = `ask_client`.`id` (`ask_policy`.`id`='ask_po.id_policy') , (`id_client`=930);` 

above code not work. problem is

`ask_policy`.`id`='ask_po.id_policy' 

**it should : **

select `ask_policy`.`policy_num`, `ask_po`.po_num, ask_client.insuranced_name `ask_policy`  inner join `ask_po` on `ask_policy`.`id` = `ask_po`.`id_policy`  inner join `ask_client`  on `ask_policy`.`id_client` = `ask_client`.`id`  (`ask_policy`.`id`=`ask_po`.`id_policy`) , (`id_client`=930); 

or active record query below :

$query->innerjoinwith(['client'])->where(['id_client'=>yii::$app->user->identity->id_client])            ->innerjoinwith(['askpos'])             ->andwhere(['ask_policy.id'=>'id_policy'])->all(); 

in yii debug show me sql :

select `ask_policy`.* `ask_policy` inner join `ask_client` on `ask_policy`.`id_client` = `ask_client`.`id` inner join `ask_po` on `ask_policy`.`id` = `ask_po`.`id_policy` (`id_client`=930) , (`ask_policy`.`id`='ask_po.id_policy') 

**it should : **

select `ask_policy`.`policy_num`, `ask_po`.po_num, ask_client.insuranced_name `ask_policy`  inner join `ask_client` on `ask_policy`.`id_client` = `ask_client`.`id`  inner join `ask_po` on `ask_policy`.`id` = `ask_po`.`id_policy`  (`id_client`=930) , (**`ask_policy`.`id`=`id_policy`**) 

why above code can different manual sql query? did make mistake in using it?

update query on andwhere condition. don't pass array here instead of pass string below.

 $query-> innerjoinwith(['askpos'])       ->andwhere("ask_policy.id = ask_po.id_policy")       ->innerjoinwith(['client'])->andwhere(['id_client'=>yii::$app->user->identity->id_client])->all(); 

Comments

Popular posts from this blog

How to understand 2 main() functions after using uftrace to profile the C++ program? -

c# - Update a combobox from a presenter (MVP) -

How to put a lock and transaction on table using spring 4 or above using jdbcTemplate and annotations like @Transactional? -