tableName при конструировании запросов

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
goodfriend
Сообщения: 50
Зарегистрирован: 2018.06.02, 09:58

tableName при конструировании запросов

Сообщение goodfriend »

Приветствую.
В доставшемся одном коде смотрю что они везде когда нужно указать имя таблицы, не указывают ее напрямую как в документации к from():

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

$query->from('user');
, а вытягивают имя через AR класс:

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

                    from(Pages::tableName() . ' page')->
                    leftJoin(Site::tableName() . ' site', 'site.id=page.website_id')->
В этом есть какой то реальный смысл?, кто то еще так делает?

Понятно что там имя если изменится таблицы, но обычно же такое не происходит
dmg
Сообщения: 685
Зарегистрирован: 2012.10.15, 03:09

Re: tableName при конструировании запросов

Сообщение dmg »

Я так делаю по причине возможного использования префиксов таблиц.
goodfriend
Сообщения: 50
Зарегистрирован: 2018.06.02, 09:58

Re: tableName при конструировании запросов

Сообщение goodfriend »

dmg писал(а): 2020.08.15, 09:54 Я так делаю по причине возможного использования префиксов таблиц.
Ну префиксы вообще не особо нужны, если это не цмс.
Но если и использовать, то я всегда просто там и где имя таблицы:

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

from('{{%pages}}'
, разве так не удобнее? Сразу понятен что будет за sql, т.к. имя таблицы видно, а не ссылка на AR класс, который еще и импортировать надо
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: tableName при конструировании запросов

Сообщение unknownby »

goodfriend писал(а): 2020.08.15, 08:57 Приветствую.
В доставшемся одном коде смотрю что они везде когда нужно указать имя таблицы, не указывают ее напрямую как в документации к from():

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

$query->from('user');
, а вытягивают имя через AR класс:

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

                    from(Pages::tableName() . ' page')->
                    leftJoin(Site::tableName() . ' site', 'site.id=page.website_id')->
В этом есть какой то реальный смысл?, кто то еще так делает?

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

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

public function getMyClass() {
        return $this->hasOne(MyClass::className(), ['myclass_id' => 'myclass_id'])->from([MyClass::TABLE_ALIAS => MyClass::tableName()]);
    }
И если устанавливаем связь между одной и другой моделью.
Можно убрать from() и тоже будет работать корректно.

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

$query = FirstClass::find()
            ->select([FirstClass::TABLE_ALIAS . '.*', 'myclass_name', 'myclass_subname'])
            ->from([FirstClass::TABLE_ALIAS => FirstClass::tableName()])
            ->joinWith('myClass', false, 'LEFT JOIN')
            ;
Ответить