@66demon666
По навыкам джун - по факту безработный

Как использовать Eloquent отдельно от laravel?

Здравствуйте! У меня самописный проект, в котором я решил использовать Eloquent в качестве ORM. Однако, я не смог воспользоваться всеми ее возможностями: функции Query Builder-а не работают в контексте моделей. То есть код
\models\User::where('test', '=', 123);
вернет null, в том время как
DB::table('users')->where('test', '=', 123);

вернет нужный результат. Однако мешать работу с бд в контроллер я не намерен. Решил создать дочерний от Eloquent Model класс модели
namespace core;
use Illuminate\Database\Eloquent\Model as EloquentModel;
use Illuminate\Database\Capsule\Manager as DB;

abstract class Model extends EloquentModel
{
    public function findWhere($param1, $param2, $param3) {
        
            return DB::table($this->table)->where($param1, $param2, $param3)->get();
    }
}


Но тогда из-за $this->table идёт привязка к контексту объекта, а это как-то криво получается. Есть ли какой-то способ решить проблему красиво?
  • Вопрос задан
  • 241 просмотр
Решения вопроса 1
delphinpro
@delphinpro Куратор тега Laravel
frontend developer
Всё прекрасно работает. Подключаем пакет illuminate/database
Расширяем свои модели от eloquent/model и всё.
Не забываем указать protected $table = 'my-table'; если таблица не соответствует принятому в eloquent именованию
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
feycot
@feycot
Посмотрите на репозиторий https://github.com/hexlet-components/php-eloquent-blog чтобы разобраться, Как работать с моделями отдельно от Laravel. В принципе все это должно работать из коробки.

Вы наследуетесь от модели Eloquent. но при этом все равно используете это как билдер запросов. Конфигурируйте ваш класс и указывайте таблицу (например в конструкторе или явно свойстве). Выглядит так, что наследование вы используете неправильно)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы