non unique table alias

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Yiivgeny
Сообщения: 80
Зарегистрирован: 2010.11.24, 10:39

non unique table alias

Сообщение Yiivgeny »

Всем привет!

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

Код: Выделить всё

public function getSame(){
    return $this->hasOne(static::className(), [static::primaryKey()[0] => static::primaryKey()[0]]);
} 
Используем так:

Код: Выделить всё

$Object = Category::find()->joinWith('same')->one(); 
И получаем
Syntax error or access violation: 1066 Not unique table/alias: 'category'
The SQL being executed was: SELECT `category`.* FROM `category` LEFT JOIN `category` ON `category`.`category_id` = `category`.`category_id`
Есть ли нормальные способы избежать этого? Под ненормальным способом я понимаю:

Код: Выделить всё

public function getSame(){
    $relation = $this->hasOne(static::className(), [static::primaryKey()[0] => static::primaryKey()[0]]);
    $relation->from(['u2' => static::tableName()]);
    return $relation;
} 
В сравнении с первым Yii, когда конфликты возникали только в самых крайних случаях это выглядит более чем грустно.
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: non unique table alias

Сообщение vitalik1183 »

Феерический бред!
Yii2!
Yiivgeny
Сообщения: 80
Зарегистрирован: 2010.11.24, 10:39

Re: non unique table alias

Сообщение Yiivgeny »

Это не бред, это простейший пример. Можно взять поля id => parent_id. От этого ничего не поменяется.
Просто этот пример заработает у каждого.
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: non unique table alias

Сообщение vitalik1183 »

Причем здесь parent_id
Вы связывайте одну сущность друг с другом. Опишите задачу, что вы хотите решить. Нет такой связи в природе где связывается таблица сама с собой.
Yii2!
Yiivgeny
Сообщения: 80
Зарегистрирован: 2010.11.24, 10:39

Re: non unique table alias

Сообщение Yiivgeny »

Как это нет. К примеру, у меня есть таблица категорий. В ней есть поле parent_id, которое ссылается на эту же самую таблицу (думаю очевидно).

Еще одним примером могу привести случай когда у модели пользователя нужно получить объект пользователя который его пригласил.

Я уже не говорю о неограниченном числе примеров если говорить о via.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: non unique table alias

Сообщение ElisDN »

Код: Выделить всё

public function getParent(){
    return $this->hasOne(static::className(), ['id' => 'parent_id'])->from(['parent' => static::tableName()]);
} 
Последний раз редактировалось ElisDN 2015.06.18, 12:51, всего редактировалось 2 раза.
Yiivgeny
Сообщения: 80
Зарегистрирован: 2010.11.24, 10:39

Re: non unique table alias

Сообщение Yiivgeny »

Это единственный вариант? Автоматического или около того именования связей нет?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: non unique table alias

Сообщение ElisDN »

Это глобальный вариант. А чтобы не засорять модель можно объявить то же в момент использования:

Код: Выделить всё

$model = Category::find()->joinWith([
    'parent' => function (ActiveQuery $query) {
        $query->from(['parent' => Category::tableName()]);
    },
)->one();
Автоматический был только в Yii1.
Yiivgeny
Сообщения: 80
Зарегистрирован: 2010.11.24, 10:39

Re: non unique table alias

Сообщение Yiivgeny »

Спасибо!
Ответить