Я пытаюсь поделиться моделями 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, так и в скрипте?