Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Как я понял, эта строка должна выдать мне таблицу юзерс из базы данных lara.
$users = DB::connection('lara')->select('users');
А мне выдаёт ошибку
Database [lara] not configured. (View:
Базы на одном хосте и вроде как настраивать больше не надо. Я почитал оф документацию, но вообще не понял как оно должно работать.
Вот эта строка даже непонятна. Что туда писать, не понимаю.
$users = DB::connection('foo')->select(...);
И можно ли как-то в модели прописать смену базы данных?
Связь со мной:
Скайп(с аватаркой) - shyraks
Телеграм - @Mramoris или +7 999 260 13 20
Не в сети
сколько у тебя баз там? как правило одной обходятся. настройки соединений все – в config/database.php. соединение по умолчанию – с именем default, но вообще их можно иметь сколько угодно. например у меня в одном проекте была необходимость общаться с биллингом на mssql, у меня было два соединения – default на локальную базу с драйвером mysql и billing на удалённый хост с драйвером sqlsrv. но это вот единственный случай.
Не в сети
Одна) Это вопрос на возможное будущее. Просто реально не понимаю как подключение к другой бд происходит средствами laravel. И можно ли у модели указать смену бд, типа разные методы или как-то так.
Связь со мной:
Скайп(с аватаркой) - shyraks
Телеграм - @Mramoris или +7 999 260 13 20
Не в сети
происходит очень просто. соединение к базе – такой же объект в сервис контейнере как и любой другой. как только какая-то модель делает выборку, она просит этот объект у сервис контейнера и тот, если он его не создавал ещё – создаёт и возвращает модели. благодаря этому например http-запросы, которые не делают ни одного запроса в базу, отрабатывают не подключаясь к ней вообще.
кроме того поскольку соединения являются именованными – можно иметь их сколько угодно, по умолчанию используется соединение с именем, указанным там же в параметре default. все они определяются в config/database.php в параметре connections и каждое обязательно имеет только параметр driver, остальные параметры – настройки этого драйвера для данного подключения. например у sqlite – это только один путь в файловой системе где лежит файл базы, у mysql – это хост, пользователь, пароль, имя базы и опционально ещё несколько. и так далее
на моделях соединение естественно можно выбрать перекрыв свойство $connection, также как настраиваются и прочие её параметры – загляни на досуге в код /vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php – много нового узнаешь. имей в виду, что связи моделей, работающих на разных соединениях могут работать довольно интересно. если с один-к-одному и один-ко-многим всё совершенно тривиально, то где будут искать пивот-таблицу отношения многие-ко-многим – я с ходу не скажу. возможно что там придётся выбирать связанные модели как-то руками.
естественно простые sql-запросы через DB::connection() будут на таблицах одной базы отрабатывать безупречно.
естественно если какая-то база легла и недоступна – об этом ты узнаешь только в момент когда попробуешь выполнить на ней первую выборку – тут-то тебя и настигнет exception. до первого запроса соединение не устанавливается и о том что база недоступна узнать неоткуда
Не в сети
Страницы 1