Pull to refresh

Comments 14

А почему бы не создать issue на github с просьбой позволить расширять список СУБД пакетами либо предложить сразу PR? Ибо мало кто решит править код в vendor — это же до первого composer update
Была такая идея. Надо бы всё правильно оформить. Но даже если они такое сделают в ядре, то это произойдёт не раньше следующей версии.
Однако разработчики фреймворка явно не рассчитывали на то, что количество поддерживаемых СУБД может расширяться за счёт сторонних пакетов. Об этом говорит то, что в классе фабрик подключений Illuminate\Database\Connectors\ConnectionFactory имена классов подключений перечислены явно.

Вы не правы. Не до конца разобрались. За непосредственно работу с подключениями отвечает DatabaseManager implements ConnectionResolverInterface. Он уже в свою очередь использует ConnectionFactory, которая содержет работу с встроенными (доступными из коробки) типами подключений. но стоит посмотреть на метод makeConnection (https://github.com/laravel/framework/blob/5.3/src/Illuminate/Database/DatabaseManager.php#L156-L177) Видим что тут есть проверка на наличие экстеншена, и только потом если его нет то идет обращение к стандартной фактори.
т.е. у вас в коде сервис провайдера должно быть что то вроде


<?php
/...
$this->app->extend('db', function (DatabaseManager $manager) {
    return $manager->extend('firebird', function() {
        return new FirebirdConnector;
    });
});

fix:


return $manager->extend('firebird', function($config, $name) {
        return (new FirebirdConnector())->conect($config);
    });
Спасибо, посмотрю. Я искренне хотел бы оформить весь этот код как пакет расширение. Попробую доработать на досуге.

А почему не jacquestvanzuydam/laravel-firebird? Я знаю чем он не нравится мне, но чем он не подошел вам?

Я его не видел вовсе. Ну или не нашёл.
Если вы обратите внимание, то как минимум у меня ещё поддержка сиквенсов добавлена. В любом случае было полезно разобраться как оно там внутри работает. А вам ещё раз спасибо.
В этом же пакете все расширяется через FirebirdServiceProvider:
https://github.com/jacquestvanzuydam/laravel-firebird/blob/master/src/Firebird/FirebirdServiceProvider.php

Хотя способ elrion мне нравится больше. т.е. Не создавать свои классы наследники от базовых фреймворка, а расширить существующие. Кода еще меньше и понятнее)
Буду рад поглядеть на пакет, если он действительно будет реализован. Саму статью проглотил.
Будет. Допилю вот этот https://github.com/jacquestvanzuydam/laravel-firebird
Добавлю туда поддержку сиквенсов, ну и посмотрю что там ещё улучшить. Наверное сделаю дополнительный параметр в настройках с указанием версии firebird для того чтобы можно было использовать новые возможности 3.0 и одновременно иметь поддержку 2.5
Предварительно это выглядит вот так.
https://github.com/sim1984/laravel-firebird
Чуть позже обзорную статью на хабр выложу.
UFO just landed and posted this here
С критикой согласен. Когда я это делал, то не смог догадаться как правильно расширить список поддерживаемых СУБД. Примера не нашёл, да и смутил код ConnectionFactory в котором указаны конкретные классы. После подсказки elrion и приведённой ссылки всё стало ясно. На самом деле тут работы для превращения этого в пакет на один рабочий день, но поскольку у меня есть и другие дела, сделаю я это не раньше выходных. А после этого либо исправлю статью (править тут не так уж много надо), либо напишу новую как анонс.
Работа над ошибками.
На основе jacquestvanzuydam/laravel-firebird был создан собственный пакет описание тут https://habrahabr.ru/post/312874/
Sign up to leave a comment.

Articles

Change theme settings