Vorfilter im Suchmodell vom Index-Controller
Ich habe einen Suchmodellnamen MedicalInformationSearch, der eine Eigenschaft als hat user_id. Ich habe auch eine Beziehung definiert - joinwith(['user','profile']). Die Profiltabelle hat auch eine Eigenschaft alsuser_id
In der Aktion MedicalInformationController - in Index, um medizinische Informationen nach Patienten für den angemeldeten Benutzer vorzufiltern, habe ich hinzugefügt
$searchModel->user_id = Yii::$app->user->identity->id;
aber jetzt bekomme ich fehler wie
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'user_id' in where clause is ambiguous
The SQL being executed was: SELECT COUNT(*) FROM `medical_information` LEFT JOIN `user` ON `medical_information`.`user_id` = `user`.`id` LEFT JOIN `user_profile` ON `medical_information`.`user_id` = `user_profile`.`user_id` WHERE `user_id`=3
Der Fehler ist sowohl die Tabelle user_profileals auch medical_informationdie Spalte user_id. Wie kann ich dies ändern, um anzugeben, welche Benutzer-ID von medical_informationund nicht von Benutzerprofil verwendet werden soll ?
Antworten
Okay, ich suche immer noch nach Möglichkeiten, das spezifische Modell oder die Tabelle in der obigen Syntax anzugeben. aber ich kann das Ergebnis auf andere Weise erzielen.
Hier ist das Detail der Aktion.
public function actionIndex()
{
$searchModel = new MedicalInformationSearch(); $user_id = Yii::$app->user->identity->id; $cond = "medical_information.user_id = $user_id"; $dataProvider = $searchModel->search(Yii::$app->request->queryParams,$cond); return $this->render('index', [
'searchModel' => $searchModel, 'dataProvider' => $dataProvider,
]);
}
Ihr erster Code ist korrekt. Legen Sie einfach den searchNamen Ihrer Funktionstabelle fest.
$query->andFilterWhere([ 'medical_information.user_id' => $this->user_id,
]);
Oder senden Sie auf zweite Weise user_id wie Funktionsparameter:
$user_id = Yii::$app->user->identity->id;
$dataProvider = $searchModel->search(Yii::$app->request->queryParams, $user_id);
und Ihre Abfrage in der Suchfunktion
$query = MedicalInformation::find()->where(['medical_information.user_id' => $user_id]);
....