А как примерно?Никаких проблем такое сделать. И ты слишком многое полагаешь на query builder. Выбор соединения все равно должен быть на более высоком уровне.
Ну в более традиционном варианте - запись намастер, чтение со слейвов?
А как примерно?Никаких проблем такое сделать. И ты слишком многое полагаешь на query builder. Выбор соединения все равно должен быть на более высоком уровне.
Ларавель это умеет из коробки версии еще с 4.2 уже лет 5 как: https://laravel.com/docs/4.2/database#read-write-connectionsА как примерно?
Ну в более традиционном варианте - запись намастер, чтение со слейвов?
Model::on($connection)->...
SomeReport::on('reports')->fetch() ...
Только она тупо все селекты на слейв направит, а запись на мастер. А для избежания использования старых данных для записи, надо ВСЕ запросы на мастер слать, когда хотим писать данные, поэтому там надо осторожнее. Но вообще да, это проще с идеологической точки зрения, чем то, о чем Гриша говорит. Там придётся некрасивые условия прописывать и коннекшен нужный для определенного запроса вычислять.Ларавель это умеет из коробки версии еще с 4.2 уже лет 5 как: https://laravel.com/docs/4.2/database#read-write-connections
Я это решаю просто немного в другом месте: я нарезал на микросервисы, когда еще это не было модным, и те места, которые пишут в базу активно, вообще не имеют в коннекшне реплики.Только она тупо все селекты на слейв направит, а запись на мастер. А для избежания использования старых данных для записи, надо ВСЕ запросы на мастер слать, когда хотим писать данные
Взрослый подход) теперь я знаю две конторы, которые так делают)Я это решаю просто немного в другом месте: я нарезал на микросервисы, когда еще это не было модным, и те места, которые пишут в базу активно, вообще не имеют в коннекшне реплики.
Опять таки, это нельзя решить автоматически, потому-что никакой фреймворк не определит критичность чтения данных для инсерта сам. Но очень легко - с именованными коннекшнами на уровне приложения:Только она тупо все селекты на слейв направит, а запись на мастер. А для избежания использования старых данных для записи, надо ВСЕ запросы на мастер слать, когда хотим писать данные, поэтому там надо осторожнее.
Model::on('master')->get()->update()...
дяденька, я ж ненастоящий сварщикВзрослый подход) теперь я знаю две конторы, которые так делают)
бугагаи srp![]()
ну уж я пытаюсь на примере пдо объяснить, раз о ней речь, так-то она сама по себе неудачный пример. В целом мысль в том, что наследование нужно для изменения реализации контракта, а не для изменения (в т.ч. расширения) самого контракта.неудачный пример