2013-07-31 5 views
2

Я хочу получить данные из двух таблиц. Я использовал приведенный ниже код для этого. Я новичок в Yii, если я делаю это неправильно, пожалуйста, предложите правильный путь.Yii - Соединения на таблицах не работают

Вот код контроллера:

$dataProvider=new CActiveDataProvider('Users', array(
    'criteria'=>array(
     'with'=>'leave', 
     'together'=>true, 
     'condition'=>'leave.user_id=:user_id', 
     'params'=>array(':user_id'=>$this->loadModel(Yii::app()->user->getId())->user_id),    
    ), 
)); 

$this->render('admin',array(
    'dataProvider'=>$dataProvider, 
)); 

Вот код зрения:

Моя проблема:

Я объединения двух таблиц пользователя и Оставить. Я хочу получить данные от пользователей от . Оставьте таблицу, а также таблицу пользователей. Приведенный выше код показывает мне данные пользователя таблицы, когда я пытаюсь показать данные из Оставьте таблицу он бросает мне следующую ошибку:

Trying to get property of non-object

UPDATE

Вот моя модель пользователя отношения:

return array(
    'leaves' => array(self::HAS_MANY, 'Leaves', 'leave_id'), 
    'creator' => array(self::BELONGS_TO, 'Users', 'created_by'), 
    'updator' => array(self::BELONGS_TO, 'Users', 'modified_by'), 
    'leave' => array(self::HAS_MANY, 'Leaves', 'user_id'), 
); 

Вот мои отпуска модели отношений:

return array(
    'user' => array(self::BELONGS_TO, 'Users', 'user_id'), 
    'creator' => array(self::BELONGS_TO, 'Users', 'created_by'), 
    'updator' => array(self::BELONGS_TO, 'Users', 'modified_by'),   
); 
+0

Каковы отношения в таблице Leave? Можете ли вы опубликовать его – Ninad

+0

Вы заявили о связи между моделью «Оставить» и моделью пользователя в обеих моделях? также почему вы передали модель в качестве параметра для: userid.Я говорю о loadmodel вещь – shanavascet

+0

@shanavascet, пожалуйста, прочитайте обновленный вопрос –

ответ

0

Отношение leave Вы не можете видеть, потому что это HAS_MANY, я имею в виду, что в вашем случае $ data-> у вас есть массив объектов Leave.

Вы должны реализовать функцию лопаются, например:

'value'=> "implode(', ', array_map(function($object) { return $object->leave_type; }, 
      $data->leave))" 

BTW, leave отношение я думаю, что должно быть HAS_ONE вместо HAS_MANY, и в этом случае вам не нужно в функции взрываться в GridView

+0

@Ninad его показать результат не найден .. –

+0

Сделать var_dump или CVarDumper :: dump() из $ data-> оставить и показать результат где-нибудь. – ineersa

0
'value'=>'$data->leave->leave_type', // WRONG 

$ data-> leave = массив объектов, и вы не можете получить доступ к нему непосредственно из файла leave_type. Этот массив был возвращен из вашего отношения ниже:

'leave' => array(self::HAS_MANY, 'Leaves', 'user_id'), 

Я не уверен, что тип отпуска, к которому вы хотите получить доступ, и связать его с пользователем. Но в этом случае, решение вы можете добавить больше отношения только доступ первым оставить запись пользователя

'singleLeave' => array(self::HAS_ONE, 'Leaves', 'user_id'), // add this line on Model User 

И тогда вы можете получить доступ к нему правильно «значение» => '$ данных-> singleLeave-> leave_type ',

На самом деле, в первом подходе $ data-> leave должен заполнять массив Листов, и оттуда каждая запись Описания должна переходить в дочерние представления, и это то место, где вам нужно идти подробно

+0

также в CGridView можно сделать примерно так: '' value '=> function ($ data, $ row) {foreach ($ data-> оставить как $ leave) echo $ leave-> leave_type;} 'Его, если столбцы должны заполняется массивом. – ineersa

+0

Я знал, но я не уверен, что он хочет, чтобы карта типа отпуска была связана со многими отношениями с одним пользователем. Если ему просто нужно в одно время, просто пользователь с одним уходом (первая запись от детей пользователя), ему не нужно будет перечислять все листья. –

+0

Это не мое '-'. Но мне очень плохой идеей)) – ineersa

Смежные вопросы