#mysql #yii2
#mysql #yii2
Вопрос:
У меня есть имя модели поиска MedicalInformationSearch, которое имеет свойство as user_id
. Я также определил отношение — joinwith(['user','profile'])
. Таблица профилей также имеет свойство user_id
В действии MedicalInformationController — in Index для предварительной фильтрации медицинской информации пациентом для зарегистрированного пользователя я добавил
$searchModel->user_id = Yii::$app->user->identity->id;
но теперь я получаю ошибку типа
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
ошибка как таблицы user_profile
, так и medical_information
столбца user_id.
итак, как я могу изменить это, чтобы указать, что user_id будет использоваться из medical_information
, а не из user_profile.
Ответ №1:
Хорошо, я все еще ищу, как указать конкретную модель или таблицу в приведенном выше синтаксисе. но я могу добиться результата другим способом.
вот подробная информация о действии.
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,
]);
}
Ответ №2:
Ваш первый код правильный, просто задайте search
имя таблицы функций.
$query->andFilterWhere([
'medical_information.user_id' => $this->user_id,
]);
Или вторым способом отправьте user_id как параметр функции:
$user_id = Yii::$app->user->identity->id;
$dataProvider = $searchModel->search(Yii::$app->request->queryParams, $user_id);
и ваш запрос в функции поиска
$query = MedicalInformation::find()->where(['medical_information.user_id' => $user_id]);
....