Использование Eloquent без Laravel - Невозможно использовать DB :: - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь поделиться моделями Eloquent между приложением Laravel и скриптом, который будет запускаться как задание cron.

use Illuminate\Database\Capsule\Manager as Capsule;

$Capsule = new Capsule;
$Capsule->addConnection(...);
$Capsule->setAsGlobal();
$Capsule->bootEloquent();

// Application logic below...

Используя приведенный выше код, я могу работать с моделями, если они не ссылаются на DB::. Например, учитывая этот класс:

namespace MyApp\Modules\Locations\Models;

use DB;
use MyApp\Models\Organisation as BaseOrganisation;

class Organisation extends BaseOrganisation
{
    /**
     * The sites associated with this organisation.
     *
     * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
     */
    public function sites() {
        return $this->belongsToMany(Site::class,
            DB::connection('default')->getDatabaseName() . '.global_lu_sites_organisation',
            'organisation_id',
            'site_id'
        );
    }
}

Эта модель работает в Laravel, но вызов sites() из скрипта приводит к этой ошибке:

Неустранимая ошибка: необнаруженная ошибка: класс 'DB' не найден в ... / app / Modules / Locations / Models / Organisation.php в строке 14

Если я изменю use DB; в модели с use Illuminate\Database\Capsule\Manager as DB;, то это будет работать на уровне сценария, но не в Laravel.

Как я могу использовать DB:: как в Laravel, так и в скрипте?

Ответы [ 2 ]

0 голосов
/ 03 мая 2019

Согласно комментарию KFoobar, добавление class DB extends Illuminate\Database\Capsule\Manager {} в глобальное пространство имен устранило проблему. Я думаю, что это работает, потому что Capsule Manager сильно зависит от статических классов.

0 голосов
/ 02 мая 2019

заменить use DB; на use Illuminate\Support\Facades\DB;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...