В одном из моих представлений в моем проекте мне нужно отобразить таблицу, которая использует данные из двух таблиц, но одна из них - таблица juction.Php Yii отношения с таблицей соединения
У меня есть две таблицы Пользователь и Навык. Связь между этими двумя - это многие-ко-многим, поэтому я создал таблицу соединений StudentSkills.
Эта таблица juction не только id_user и id_skill, как обычно, но и процентное значение, которое является уникальным для данной пары идентификаторов - вот почему это в распределительной таблице, даже если вы не должны положить что-нибудь еще там как хорошая практика.
сказал В таблице в представлении мне нужно отобразить строки, содержащие Имени от мастерства таблицы и процента от StudentSkills спая стола из пользователя certion.
Это мое мнение:
<?php
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'skills-grid',
'dataProvider'=>$model->with('student_skills')->searchWithStudentId($id),
'template' => '{items}{pager}',
'cssFile'=>Yii::app()->request->baseUrl. '/themes/'. Yii::app()->theme->name.'/css/table.css',
'htmlOptions'=>array('class'=>'datagrid', 'style'=>'width:550px;'),
'columns'=>array(
array(
'name'=>Yii::t('MainTrans', 'Name'),
'value' => '$data->name',
),
array(
'name'=>'percentage',
'header' => Yii::t('MainTrans', 'Success rate %'),
'value' => '$data->student_skills->percentage',
),
),
));
?>
И это мой поиск и отношения в моей Skill $ модели:
public function relations()
{
return array(
//the first two relations were generated by gii
'problems' => array(self::MANY_MANY, 'Problems', 'problem_skill(id_skill, id_problem)'),
'users' => array(self::MANY_MANY, 'User', 'student_skills(skill_id, student_id)'),
//this is what tired to do
'student_skills' => array(self::HAS_MANY, 'StudentSkills', 'skill_id'),
);
}
public function searchWithStudentId($studentId)
{
// my custom search to find all records with certain user_id
$criteria=new CDbCriteria;
$criteria->compare('id',$this->id);
$criteria->compare('name',$this->name,true);
$criteria->with = array('student_skills');
$criteria->together = true;
$criteria->compare('student_skills.student_id',$studentId);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'pagination'=>array(
'pageSize'=>25,
),
'sort'=>array(
'defaultOrder'=>array(
'title'=>CSort::SORT_ASC
)
),
));
}
Когда я пытаюсь сделать страницу, я получаю ошибку: Пытаюсь для получения свойства не-объекта.
Я знаю, что с моим кодом что-то не так, и это скорее всего связано с отношениями, но я не могу найти что-либо.
Может ли кто-нибудь помочь в решении этой проблемы без необходимости создавать новую таблицу?
Благодаря
Вы написали 'student_skills' в' 'DataProvider' => $ модельно> с ('student_skills') -> searchWithStudentId ($ id), 'а затем в' searchWithStudentId() 'функция, у вас снова есть' $ criteria-> with = array ('student_skills'); ' –
Попробуйте изменить' dataProvider '=> $ model -> с ('student_skills') -> searchWithStudentId ($ id), 'to' 'dataProvider' => $ model-> searchWithStudentId ($ id), ' –
@KunalDethe - Я попробовал ваше предложение во втором посте, но не сделал этого, t wor к. Я не понимаю, что вы хотели сказать по первому комментарию ... – Nugy