2017-04-07 4 views
0

Ich habe eine Abfrage für aktive Datensätze erstellt und funktioniert nicht für meine Datenabfrage. Meine Rasteransicht ist leer. Ich versuche es manuell, das Ergebnis ist in Ordnung. und ich fand und ich fand die Ursache des Problems, um über die falsche SQL-Abfrage zu vergleichen, siehe Code unten.Yii2 Falscher aktiver Datensatz Abfragesyntax in der Debug-Symbolleiste

aktive Datensatz Abfrage:

$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`.* FROM `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` WHERE (`ask_policy`.`id`='ask_po.id_policy') AND (`id_client`=930);` 

obiger Code nicht funktionieren. das Problem ist,

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

** Es sollte sein: **

SELECT `ask_policy`.`policy_num`, `ask_po`.po_num, ask_client.insuranced_name FROM `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` WHERE (`ask_policy`.`id`=`ask_po`.`id_policy`) AND (`id_client`=930); 

oder aktive Datensatz Abfrage wie folgt unten:

$query->innerjoinWith(['client'])->where(['id_client'=>Yii::$app->user->identity->id_client]) 
      ->innerJoinWith(['askPos']) 
      ->andWhere(['ask_policy.id'=>'id_policy'])->all(); 

in yii debug zeigt mir sql:

SELECT `ask_policy`.* FROM `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` WHERE (`id_client`=930) AND (`ask_policy`.`id`='ask_po.id_policy') 

** es sollte sein: **

SELECT `ask_policy`.`policy_num`, `ask_po`.po_num, ask_client.insuranced_name FROM `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` 
WHERE (`id_client`=930) AND (**`ask_policy`.`id`=`id_policy`**) 

warum der obige Code unterscheidet sich von manuellen SQL-Abfrage sein kann? Habe ich einen Fehler gemacht?

Antwort

0

Aktualisieren Sie Ihre Abfrage auf AndWhere Bedingung. Übergeben Sie hier nicht das Array, sondern die Passage wie unten.

$query-> innerJoinWith(['askPos']) 
     ->andwhere("ask_policy.id = ask_po.id_policy") 
     ->innerjoinWith(['client'])->andWhere(['id_client'=>Yii::$app->user->identity->id_client])->all(); 
+0

vielen Dank –

Verwandte Themen