Laravel извлекает записи из базы данных, используя mysql представление вместо самой таблицы - PullRequest
5 голосов
/ 22 января 2020

Я знаю, что это простой вопрос, и я очень старался найти решение для этого. Может быть, кто-то знает или испытал это уже, что может помочь мне.

Я только начинающий в использовании Laravel, пожалуйста, потерпите меня.

Итак, у меня есть это AgencyModel, имя моя таблица в базе данных agency. И у меня есть MySQL view, который называется view_agency, он содержит внутреннее объединение таблицы agency и других таблиц, с которыми он связан.

Модель (Это рабочий код )

  protected $table = 'agency';

Записи отображаются, когда я использую agency в качестве имени таблицы

Но MySQL просмотр таблицы view_agency не отображает / извлекает записи из базы данных.

Модель (Этот код не работает)

protected $table = 'view_agency';

У меня есть подозрение, что красноречивый laravel может иметь отношение к этому, потому что $ table принимается только, а не mysql просмотр.

use Illuminate\Database\Eloquent\Model;

Спасибо ...

1 Ответ

1 голос
/ 22 января 2020

В SQL представление - это виртуальная таблица, основанная на наборе результатов оператора SQL.

И вы можете получать данные из представления просто например, данные таблицы :

select * from view_agency

Таким образом, вы можете использовать Laravel построитель запросов или Eloquent для запроса таких записей, как таблица,

Laravel преобразует запрос Builder или Eloquent на sql, поэтому он будет работать :

DB::table('view_agency')->get();

Я использовал это раньше, я создал каталог views/ внутри models/ и создал все файлы представлений внутри.

Я думаю, вы можете создать эту модель представления следующим образом:

namespace App\Models\Views;

use Illuminate\Database\Eloquent\Model;
class ViewAgency extends Model {
}

Однако я следую по пути laravel. Я использую нижнее подчеркивание формы множественного числа. Поэтому, когда я использую ViewAgency, Laravel найдет table или view имя, которое view_agencies:

ViewAgency::first();

Работает нормально.

И Если вы хотите изменить имя, и я думаю, что нет ошибки с protected $table = 'view_agency;', вы можете попробовать это следующим образом:

class ViewAgency extends Model {
    public function __construct()
    {
        $this->setTable('view_agency');
    }
}

Это тоже будет работать

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