Построение SQL-запроса при помощи yii
Построение SQL-запроса при помощи yii
Привет всем,
хотелось бы использовать Yii - конструктор запроса,
у меня такой запрос, я не вполне представляю, как его можно реализовать:
"SELECT * FROM tutor
JOIN school
JOIN user_school
WHERE school.id = user_school.school_id
AND user_school.user_id = tutor.user_id"
Нахожусь в моделе "Tutor", отсуда и хочу произвести этот запрос.
хотелось бы использовать Yii - конструктор запроса,
у меня такой запрос, я не вполне представляю, как его можно реализовать:
"SELECT * FROM tutor
JOIN school
JOIN user_school
WHERE school.id = user_school.school_id
AND user_school.user_id = tutor.user_id"
Нахожусь в моделе "Tutor", отсуда и хочу произвести этот запрос.
Re: Построение SQL-запроса при помощи yii
Я там уже был. Мне бы по моему вопросу какой нибудь пример, там где двойной join в реляции прописывается, как оно вообще выглядит...anton44eg писал(а):http://www.yiiframework.com/doc/guide/1 ... tabase.arr
Re: Построение SQL-запроса при помощи yii
Иногда проще использовать обычный queryBuilder, завернутый в соотв. метод. Либо используйте criteria-chaining, т.к. когда в методе получаете $this->getCriteria()->mergeWith(); и т д. Либо через обычный find.
Re: Построение SQL-запроса при помощи yii
Моветон. Пиши INNER JOIN.Reinchold писал(а):JOIN
Re: Построение SQL-запроса при помощи yii
Показывай что уже пробовал, что не получилось?Reinchold писал(а):там где двойной join в реляции прописывается, как оно вообще выглядит...
Re: Построение SQL-запроса при помощи yii
Вот, что у меня имеется, конечно не работает как надо...
Мне нужна правильная связь между классами через relations()...
models/Tutor.php
view/admin.php
Мне нужна правильная связь между классами через relations()...
models/Tutor.php
Код: Выделить всё
class Tutor extends CActiveRecord
{
public function relations()
{
return array(
'schools' => array(self::MANY_MANY, 'School', 'user_school(school_id, user_id)'),
);
}
public function renderSchool($data=null,$row=0)
{
$tmpds = Tutor::model()->with('schools')->findAll($data ? $data->user_id : $this->user_id);
print_r($tmpds);
$array = array();
foreach ($tmpds as $tmpd)
$array[] = $tmpd ? $tmpd->name : '';
return $array;
}
}
Код: Выделить всё
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'tutor-grid',
'enablePagination'=>true,
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'id',
array('name'=> Yii::t('labels','model.school.name'),
'filter'=>'',
'value'=> '$data->renderSchool()'
),
array('class'=>'CButtonColumn',
),
),
)); ?>
Последний раз редактировалось Reinchold 2013.06.26, 09:57, всего редактировалось 1 раз.
Re: Построение SQL-запроса при помощи yii
У меня есть три таблицы:
И притом через Foreign Keys соеденены только "user_school" с "school"
tutor
id--------user_id-------supervisor_id
12-------2-------------9
user_school
user_id--------school_id--------id
1-------------14--------------1
2-------------15--------------2
7-------------13--------------3
2-------------14--------------4
school
id-----lang_id-----name
13----1----------School-1
14----1----------School-2
15----1----------School-3
И притом через Foreign Keys соеденены только "user_school" с "school"
tutor
id--------user_id-------supervisor_id
12-------2-------------9
user_school
user_id--------school_id--------id
1-------------14--------------1
2-------------15--------------2
7-------------13--------------3
2-------------14--------------4
school
id-----lang_id-----name
13----1----------School-1
14----1----------School-2
15----1----------School-3
Re: Построение SQL-запроса при помощи yii
пришлось таким образом выкручиваться...
Но вот ещё в чём вопрос, как теперь с фильтром быть?
как заставить его ратотать???
Код: Выделить всё
public function renderSchool($data=null,$row=0)
{
$sql = "SELECT * FROM school
JOIN user_school
JOIN tutor
WHERE school.id = user_school.school_id
AND user_school.user_id = tutor.user_id
";
$tmpds = School::model()->findAllBySql($sql);
// print_r($tmpds);
$array = array();
foreach ($tmpds as $tmpd)
$array[] = $tmpds ? $tmpd->name : '';
return $array;
}
как заставить его ратотать???
- Neuromance
- Сообщения: 716
- Зарегистрирован: 2011.09.06, 13:04
Re: Построение SQL-запроса при помощи yii
У меня только 2 вопросаReinchold писал(а):пришлось таким образом выкручиваться...Но вот ещё в чём вопрос, как теперь с фильтром быть?Код: Выделить всё
public function renderSchool($data=null,$row=0) { $sql = "SELECT * FROM school JOIN user_school JOIN tutor WHERE school.id = user_school.school_id AND user_school.user_id = tutor.user_id "; $tmpds = School::model()->findAllBySql($sql); // print_r($tmpds); $array = array(); foreach ($tmpds as $tmpd) $array[] = $tmpds ? $tmpd->name : ''; return $array; }
как заставить его ратотать???
1. Почему таблицы связываешь так неудобно. Вместо использования ON связываешь их в WHERE ?
2. Какой результат выполнения этого кода?
Код: Выделить всё
foreach ($tmpds as $tmpd)
$array[] = $tmpds ? $tmpd->name : '';
Видимо имелось ввиду что-то такое
Код: Выделить всё
foreach ($tmpds as $tmpd)
$array[] = $tmpd ? $tmpd->name : '';