Laravel Database read after wirte

флоппик

promotor fidei
Команда форума
Партнер клуба
В свете запиливания коханы девелоперами в гроб, в паузах почитываю доки лярвы.
Запилю вопросик, может кто столкнулся уже. В документации описано, что он умеет раздельно писать на мастер, а читать с реплик.
А можно ли как-то без излишнего рукоприкладства заставить читать из мастера после вставки, для того что бы пользователь получил гарантированный фидбек о результате?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
А что - ::connection()? read/write в одном коннекшне описаны. Ты предлагаешь просто дубликат мастера добавить, и на него переключать? Или я тебя неверно понял?
 

Absinthe

жожо
Ну так еще раз опиши текущий write под именем нового соединения без разделения на read/write и используй ::connection/::eek:n
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Ну так еще раз опиши текущий write под именем нового соединения без разделения на read/write и используй ::connection/::eek:n
Ну так то я догадался, просто слегка error-prone иметь дубли в конфигах. Думал, может какой-то есть родной метод типа Database::force_read_master, грубо говоря)
 

Girakon

Новичок
Не, такого метода однозначно нет, там внутри класса Connection, в методах select,update,delete,insert статично прописано что для выборки юзается getReadPdo() метод, а для изменений getPdo() (например тут), которые соответственно возвращают read и write коннект. Поэтому только дублирование конфигов, и переключение коннекта по ходу дела.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Ну да, в результате походу, более правильный ответ сводится к ->setReadPdo(->getPDO) - обзову его force_read_master, и буду с ним жить.
 

Girakon

Новичок
;)

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

флоппик

promotor fidei
Команда форума
Партнер клуба
не знаю конечно твою ситуацию, но раз тебе сразу нужны данные которые ты только что отправил в бд, возможно проще сразу же их и использовать не обращаясь в бд? Если это разные запросы, то возможно сохранить в сессию.
Мне нужно конкретно проконтролировать, что они попали в БД, и показать это пользователю. Грубо говоря, отобразить пополнение/списание баланса, и т.п. в типичном для веба сценарии get after post
 

Girakon

Новичок
Мне нужно конкретно проконтролировать, что они попали в БД, и показать это пользователю. Грубо говоря, отобразить пополнение/списание баланса, и т.п. в типичном для веба сценарии get after post
А при каких обстоятельствах у тебя код отработал не сообщив об ошибке, и при этом данные все таки не попали в базу? Мне кажется тут ни какого дополнительного контроля не нужно, если ошибки не было, то смело сообщает без доп проверок, что списал/пополнил.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Проблема не в сообщить. А отобразить новые данные и дать с ними работать с учетом изменившихся сумм, истории списаний, и т.п. сразу, поскольку они есть на мастере.
 

Girakon

Новичок
можно маленько подождать, и они появятся и на слейве. Как вариант:
1. Вставили данные, запомнили например таймштамп
2. По запомненному таймштампу делаем запрос с интервалом на сервере, в ожидании увидеть новые данные
3. как только увидели, сразу их отобразили

Так вконтактик делает, он шлет таймштапм послднего обращения к серверу, и получает события за промежуток времени между сейчас и последним таймштампом
 
Сверху