У меня есть следующие критерии в моем контроллере.
$criteria = new CDbCriteria; $criteria->select = 't.*,b.*,c.*'; $criteria->join = "INNER JOIN tbl_patient_chair b ON b.patient = '0005' INNER JOIN tbl_chair c ON b.chair = c.Serial_No"; $criteria->condition = "t.client_id = '0005'"; $model = Patient::model()->findAll($criteria); $this->render('view', array( 'model' => $model ));
Затем, на мой взгляд, я пытаюсь получить все выбранные данные, выполнив следующие действия:
foreach ($model as $models) print_r($model);
Но в результате я вижу, что нет данных из второй и третьей таблицы. Данные первой таблицы успешно получены, однако я не могу отобразить данные другой таблицы.
Может ли кто-нибудь сказать мне, что я делаю неправильно?
Соединения лучше всего использовать в Yii, создавая отношения, поэтому вам не нужно будет писать сложные запросы
Начните с добавления внешних ключей в своих таблицах sql (например, добавьте пациента с иностранным ключом на стуле)
Затем, если вы регенерируете свою модель, вы можете увидеть, что отношения добавлены автоматически (или вы можете вручную добавить отношения)
public function relations() { return array( 'chairs' => array(self::HAS_MANY, 'chair', 'patientId'), ); }
И в модели стула вы увидите соотношение
'patient' => array(self::BELONGS_TO, 'patient', 'patientId'),
Определение только отношения позволяет получить доступ к значениям в запрошенной модели в виде $ model-> relationName, если вы хотите использовать столбец в состоянии «где», используйте следующий запрос в вашей функции модели (ов)
$patients=Patient::model()->findAll(array( 'condition' => "$field like '%$value%'", 'with'=>array('chairs'), 'select'=> "*", ));
Ключевое слово «с» важно и может содержать массив списка отношений для включения в запрос. Условие запроса будет применяться ко всем включенным таблицам. Здесь вы можете пропустить ключевое слово «с», если вы не хотите запрашивать поле из другой таблицы, и нужны только выходные данные.
И вы можете добраться до стульев, назначенных пациенту,
foreach($patients as $patient)print_r($patient->chairs);
Существуют и другие подходы, например, обсуждаемые здесь
Чтобы узнать больше об отношениях, перейдите сюда