Prefiltro in searchmodel dal controller di indice
Ho un nome di modello di ricerca MedicalInformationSearch che ha una proprietà come user_id. Ho anche definito una relazione - joinwith(['user','profile']). Anche la tabella dei profili ha una proprietà comeuser_id
In MedicalInformationController - nell'azione Index per prefiltrare le informazioni mediche in base al paziente per l'utente che ha effettuato l'accesso, ho aggiunto
$searchModel->user_id = Yii::$app->user->identity->id;
ma ora ricevo un errore come
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
l'errore essendo sia tavolo user_profilee medical_informationsta avendo colonna user_id. quindi come posso modificarlo per specificare che user_id deve essere utilizzato da medical_informatione non da user_profile.
Risposte
Ok, sto ancora cercando come specificare il modello o la tabella specifici nella sintassi sopra. ma riesco a ottenere il risultato in un altro modo.
ecco il dettaglio dell'azione.
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,
]);
}
Il tuo primo codice è corretto, è sufficiente impostarlo nel searchnome della tabella delle funzioni.
$query->andFilterWhere([ 'medical_information.user_id' => $this->user_id,
]);
O in secondo luogo invia user_id come il parametro della funzione:
$user_id = Yii::$app->user->identity->id;
$dataProvider = $searchModel->search(Yii::$app->request->queryParams, $user_id);
e la tua query nella funzione di ricerca
$query = MedicalInformation::find()->where(['medical_information.user_id' => $user_id]);
....