Pull to refresh

Comments 15

Статья о том, что в php есть наследование?
Разработчики Yii изменят реализацию класса и все пойдет прахом. Это костыль.
Для разработчиков Yii публичный контракт ничего не значит?
Это не костыль. Это проектное решени. Это нормально.
> User::find()->where([User::ATTR_ID => $userid,])

В Yii2 можно юзать ActiveRecord::primaryKey()

https://github.com/yiisoft/yii2/blob/master/framework/db/ActiveRecord.php#L318
простите… вы о чем? User::find()->where([User::ATTR_АБЫРВЛАГ=> $userАбырвлаг,])

просто я не заметил, где я в своем посте предложил соревноваться в знании фрейморка.
Вы излишне агрессивны.

Вы поделились кусочком совего знания (предложили посоревноваться в знании PG, ага), я поделился кусочком своих знаний.

Имелось ввиду, что можно использовать существующую функциональность и не вносить дублирование кода.

> User::find()->where([User::primaryKey() => $userid])

Подсветки, ессесн, нет, спасибо НЛО.

Аривидерчи, Влад.
но я вам все-таки отвечу почему не PK. Дело в том, что в IDE есть такая штука как Find Usage. Дальше можете подумать сами.
А в каких случаях может возникнуть ситуация, когда запрос надо направить именно в мастер?
например, когда вы сделали INSERT и вам сразу же надо узнать состояние таблицы т.к. у вас нет гарантии, что INSERT сделали только вы. Это, конечно, абстрактно.
ну, или пример из практики:

Приходит звонок в коллцентр, записывается запись в мастер и ставится в кеш ключ, что для такого-то оператора есть звонок c некоторым ID.
У оператора в рабочем месте AJAX постоянно опрашивает сервер, есть ли для него звонки? Когда он получает ключ, что звонок есть, он пытается подгрузить карточку этого звонка, делая SELECT. У PGPool очень небольшой лаг синхронизации, но иногда возникает ситуация, что ID того звонка, который закоммитился в мастер еще нет в SLAVE базе.

Таких примеров можно привести много.
Не проще ли в этом случае в кэш записывать не только ID звонка, но все данные о звонке сразу? В этом случае клиент не будет делать два запроса в случае если новый звонок появился, да и SELECT в мастер не понадобится по идее. Плюс, не нужно будет делать кэш персистентным (иначе придется что-то думать на случай потери кэша).
Я вам описал частный случай, который, конечно, не совершенен и просто показывает общую картину. Мы эту реализацию в рамках данного поста лучше не будем обсуждать — у меня есть пара мыслей о статьях на тему Asterisk + Yii2.

Если хотите, я приведу примеры не из моих модулей, где это критично, но завтра.

И, очень хочется, чтобы разработчики Yii все-таки как-то это сделали «внутри» из коробки.

Что именно? Полную поддержку PGPool в ActiveRecord, который должен прозрачно работать не только с Postgres но и со многими другими БД?


Мне кажется, таких вещей, как noBalance(), который работает только для Postgres и только для PGPool в ActiveRecord во фреймворках лучше не реализовывать вообще.

Sign up to leave a comment.

Articles