首页 > 解决方案 > Laravel 使用 mysql 视图而不是表本身从数据库中检索记录

问题描述

我知道这是一个简单的问题,我努力寻找解决方案。也许有人已经知道或经历过这可能对我有帮助。

我只是使用 Laravel 的初学者,请多多包涵。

所以我有了这个AgencyModel,我的表在数据库中的名字是agency. 我有一个view名为的 MySQL view_agency,它包含表的内部agency连接和与之连接的其他表。

模型(这是工作代码)

  protected $table = 'agency';

当我使用agency作为表名时显示的记录

但是 MySQL 视图表view_agency不显示/检索数据库中的记录。

型号(此代码无效)

protected $table = 'view_agency';

我怀疑 laravel 雄辩可能与此有关,因为 $table 仅被接受,而不是 mysql 视图。

use Illuminate\Database\Eloquent\Model;

谢谢...

标签: laraveleloquent

解决方案


在 SQL 中,视图是基于 SQL 语句结果集的虚拟表。

您可以像表的数据一样从视图中获取数据:

select * from view_agency

因此,您可以使用 Laravel 查询构建器或 Eloquent 构建器来查询表等记录,

Laravel 会将查询生成器或 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 会找到tableorview的名称,即view_agencies

ViewAgency::first();

它工作正常。

如果你想更改名称,并且我认为没有错误protected $table = 'view_agency;',你可以尝试这种方式:

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

这也行


推荐阅读