laravel - 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;
谢谢...
解决方案
在 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 会找到table
orview
的名称,即view_agencies
:
ViewAgency::first();
它工作正常。
如果你想更改名称,并且我认为没有错误protected $table = 'view_agency;'
,你可以尝试这种方式:
class ViewAgency extends Model {
public function __construct()
{
$this->setTable('view_agency');
}
}
这也行
推荐阅读
- haskell - 从 Bool 到 String 的输入“->”模式匹配时 Haskell 解析错误
- azure-functions - Azure Functions,使 local.settings.json 值优先于系统环境变量
- heroku - Heroku ChatOps(Slack 集成)- 仅路由生产事件
- javascript - 为什么反应值有时不会在模板中更新?(Vue)
- linux - 递归删除所有文件和文件夹,但不包括一个文件夹
- xcode - How Can I Make a View, With a Tab View in It, Scrollable?
- java - Spring:@Configuration 类的注解
- excel - 带有公式的 VBA Excel IF 语句
- optimization - 优化高速公路网络
- swift - 如何捕获 UITest 期间导致的 fatalError?