Vorfilter im Suchmodell vom Index-Controller

Oct 25 2020

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

Joshi Oct 25 2020 at 18:36

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,
        ]);
    }
vvpanchev Oct 25 2020 at 19:59

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]);
....