【问题标题】:Laravel retrieve records from database using mysql view instead of the table itselfLaravel 使用 mysql 视图而不是表本身从数据库中检索记录
【发布时间】:2020-01-22 07:39:09
【问题描述】:

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

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

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

模型(这是工作代码)

  protected $table = 'agency';

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

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

模型(此代码无效)

protected $table = 'view_agency';

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

use Illuminate\Database\Eloquent\Model;

谢谢...

【问题讨论】:

  • 我以前做过这个,它有效...,你的视图名称真的是view_agency吗?
  • 你能把 $table 重命名为 $readFrom 并检查一下
  • 你没有说错误是什么,只是有一个错误。如果您可以提供错误,我们可以提供更好的原因和解决方案。
  • @TsaiKoga 是的,mysql 视图的名称是 view_agency
  • @Jason 哦。好的。对此感到抱歉。忘了提。错误是它只是不显示或检索记录

标签: laravel eloquent


【解决方案1】:

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

您可以从视图中获取数据就像表格的数据

select * from view_agency

所以你可以使用 Laravel 查询构建器或 Eloquent 构建器来查询表等记录,

Laravel 会将查询构建器或 Eloquent 转换为 sql,所以它可以工作

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

我以前这样做过,我在models/ 内创建了一个views/ 目录,并在其中创建了所有视图的文件。

我认为您可以像这样创建视图模型:

namespace App\Models\Views;

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

但是,我遵循 laravel 的方式。我使用小写的下划线复数形式。所以当我使用ViewAgency 时,Laravel 会找到tableview 的名称,即view_agencies

ViewAgency::first();

效果很好。

如果你想改名字,而且我认为protected $table = 'view_agency;'没有错误,你可以试试这个方法:

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

这也行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    相关资源
    最近更新 更多