Поиск и сортировка по родственной модели в CGridView Yii

Я хочу сделать мои столбцы CGridView доступными для поиска после прочтения этот проблема в том, когда я использую один cdbCriteria->with состояние работает нормально. Но это дает ошибку, когда я добавляю более одного cdbCriteria->with состояние. Более конкретно, я вставляю свой код здесь.

           $criteria=new CDbCriteria;
$criteria->with = array( 'teacherGradeSection','course'  );
$criteria->with = array( 'teacherGradeSection','teacher' );
$criteria->together = true;
$criteria->compare('course.name', $this->course_search, true );
$criteria->compare('teacher.firstname', $this->teacher_search, true );

Когда я использую только один с условием, он работает нормально, но выдает ошибку, когда используется более одного с условием.

ошибка

SQLSTATE[42S22]: Column not found: 1054 Unknown column

Изменить 1:
Это доступные отношения

public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'submissions' => array(self::HAS_MANY, 'Submission', 'task_id'),
'teacherGradeSection' => array(self::BELONGS_TO, 'TeacherGradeSection', 'teacher_grade_section_id'),
'course'    => array(self::HAS_MANY, 'Course', array('course_id'=>'id'),'through'=>'teacherGradeSection'),
'teacher'=>  array(self::HAS_MANY,'Teacher',array('teacher_teacher_id'=>'teacher_id'),'through'=>'teacherGradeSection'),
); }

Как предложил @Nisic и @ Noam148, когда я использую
$criteria->with=array('teacherGradeSection','course','teacher ')
Я получил следующую ошибку

CDbCommand failed to execute the SQL statement: SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'teacherGradeSection'. The SQL statement executed was: SELECT COUNT(DISTINCT `t`.`id`) FROM `task` `t` LEFT OUTER JOIN `teacher_grade_section` `teacherGradeSection` ON (`t`.`teacher_grade_section_id`=`teacherGradeSection`.`id`) LEFT OUTER JOIN `course` `course` ON (`course`.`id`=`teacherGradeSection`.`course_id`) LEFT OUTER JOIN `teacher_grade_section` `teacherGradeSection` ON (`t`.`teacher_grade_section_id`=`teacherGradeSection`.`id`) LEFT OUTER JOIN `teacher` `teacher` ON (`teacher`.`teacher_id`=`teacherGradeSection`.`teacher_teacher_id`)

0

Решение

попробуйте определить два отношения, которые разрешат конфликт

'teacherGradeSection' => array(self::BELONGS_TO, 'TeacherGradeSection', 'teacher_grade_section_id'),
'teacherGradeSectiontwo' => array(self::BELONGS_TO, 'TeacherGradeSection', 'teacher_grade_section_id'),

и по вашим критериям

$criteria->with['course'] = array( 'teacherGradeSection','course'  );
$criteria->with['teacher']= array( 'teacherGradeSectiontwo','teacher' );
1

Другие решения

Ваш второй with на самом деле заменит ваш первый with так что вы не будете стремиться загрузить курс, поэтому, когда вы позже будете ссылаться на него в compare Вы получаете ошибку.

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

$criteria->with = array( 'teacherGradeSection','course', 'teacher'  );

или просто объясните нам отношения

0

Вы можете использовать $criteria->with собственность один раз. Когда вы использовали $criteria->with во второй раз ты переопределение первый.

Смотрите здесь, как использовать свойство with. Таким образом, вы добавляете 3 разных отношения к вашему «CDbCriteria»:

$criteria=new CDbCriteria;
$criteria->with = array( 'teacherGradeSection','course','teacher');
$criteria->together = true;
$criteria->compare('course.name', $this->course_search, true );
$criteria->compare('teacher.firstname', $this->teacher_search, true );
0