Я хочу сделать мои столбцы 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`)
попробуйте определить два отношения, которые разрешат конфликт
'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' );
Ваш второй with
на самом деле заменит ваш первый with
так что вы не будете стремиться загрузить курс, поэтому, когда вы позже будете ссылаться на него в compare
Вы получаете ошибку.
Вам нужен только один, который готовит и курс, и учителя. Я не могу быть уверен, как написать это без схемы базы данных, но вы можете попробовать это вслепую:
$criteria->with = array( 'teacherGradeSection','course', 'teacher' );
или просто объясните нам отношения
Вы можете использовать $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 );