Теряет имя соединения при получении записи (вне Laravel / enssegers / laravel-mongodb) - PullRequest
0 голосов
/ 12 февраля 2019

Мне нужна ваша помощь, я использую Eloquent и enssegers / laravel-mongodb за пределами Laravel Framework. Мне удалось правильно настроить как Eloquent, так и laravel-mongodb, и он работает корректно для вставки и получения результатов, однако при попытке изменитьреестр, eloquent теряет имя подключения, выдавая следующую ошибку:

Argument 1 passed to Jenssegers\Mongodb\Query\Builder::__construct() must be an instance of Jenssegers\Mongodb\Connection, instance of Illuminate\Database\MySqlConnection given, called in /www/html/syberianbox/sachiel/vendor/jenssegers/mongodb/src/Jenssegers/Mongodb/Eloquent/Model.php on line 421

Я делюсь конфигурацией Eloquent через Capsula и laravel-mongodb

$this->_capsule = new Capsule();

$this->_capsule->getDatabaseManager()->extend('mongodb', function($config) {
    return new MongodbConnect($config);
});

//MySQL connection, $ this -> _ config contains an array with the correct values
$this->addConnection('default', [
    'driver'     => $this->_config['default']['driver']
    ,'host'      => $this->_config['default']['host']
    ,'database'  => $this->_config['default']['database']
    ,'username'  => $this->_config['default']['username']
    ,'password'  => $this->_config['default']['password']
    ,'charset'   => $this->_config['default']['charset']
    ,'collation' => $this->_config['default']['collation']
    ,'prefix'    => $this->_config['default']['prefix']
]);

//MongoDB connection
$this->addConnection('archivos', [
    'driver'     => $this->_config['archivos']['driver']
    ,'host'      => $this->_config['archivos']['host']
    ,'port'      => $this->_config['archivos']['port']
    ,'database'  => $this->_config['archivos']['database']
]);

Модель:

<?php
namespace Instances\Generic\Models\CFDI;

use Jenssegers\Mongodb\Eloquent\Model;

class Archivo extends Model
{
    protected $collection = 'cfdi';
    protected $connection = 'archivos';
}

Исполнить модель:

$archivoDB = Archvio::Where('_id',$id)->first();
$this->_logger->info('Archivo: ', $archivoDB);
$archivoDB->uuid = $uuid;
$archivoDB->type = $type;
$archivoDB->content = $content;

$archivoDB->save();

Регистратор:

[2019-02-12 14:20:36:511603][Instances/Generic/Modules/Administracion/ArchivosController.php : 75][Info][30117] Archivo: 
Instances\Generic\Models\CFDI\Archivo Object
(
    [collection:protected] => cfdi
    [connection:protected] => 
    [primaryKey:protected] => _id
    [keyType:protected] => string
    .....

1 Ответ

0 голосов
/ 13 февраля 2019

Мне удалось решить проблему, однако это скорее патч, чем полное решение.

Я расширяю класс Model of jenssegers / laravel-mongodb, и по мере написания метода getConnectionName () и возвращаюимя ожидаемого соединения, так как в моем случае это только одно соединение, имя остается неизменным, однако метод дает стрелке возможность включать всю необходимую логику для идентификации соединения с рассматриваемой моделью

Модель:

<?php
namespace Syberianbox\Db;

use Jenssegers\Mongodb\Eloquent\Model;


class Monomodel extends Model
{
    public function getConnectionName() {
        return 'archivos';
    }
}
...