【问题标题】:Eloquent model cannot select from MySQL viewEloquent 模型无法从 MySQL 视图中选择
【发布时间】:2021-11-13 20:24:58
【问题描述】:

有 MySQL 视图'histstat'。

在 MySQL 中 select * from histstat 工作正常。

Laravel 模型非常简单:

class HistStat extends Model
{
    use HasFactory;

    protected $table = 'histstat';

    protected $fillable = ['day', 'total', 'paid'];
}

那我想获取 hisstat 的前 14 条记录:

$dynamic = HistStat::all()->slice(14);

...执行以错误SQLSTATE[42000]: Syntax error or access violation: 1055 (SQL: select * from 'histstat')结束

当我尝试使用基于表格的模型 ($dynamic = History::all()->slice(14);) - 一切正常。

所以,MySQL 视图 + Laravel 的问题。

如何在 Laravel 中使用基于视图的模型?

【问题讨论】:

  • 为什么不使用limit而是使用slice?
  • 很抱歉没有解决您的问题。但是你不能在 sql 视图中使用 laravel eloquent 查询。
  • 再次,如果您有解决方案,请发布答案。不要将其编辑到您的帖子中。问题是针对问题的,不是答案

标签: mysql laravel eloquent sql-view


【解决方案1】:

对于 SQL 错误,

config\database.php"mysql" 数组中

设置'strict' => false

我认为这个对Laravel: Syntax error or access violation: 1055 Error有帮助。

对于前14条记录,你可以做到

HistStat::oldest()->take(14)->get();

all() 更好,因为如果您有一个要在服务器上加载的大表,我不建议使用它,因为all() 获取所有记录select * from "users"

【讨论】:

  • 抱歉,'strict' => false 什么都不做。错误再次出现
  • 请清除缓存并重试。
  • 还是没有效果
  • 'strict' => false 不足以安全地使用 MySQL 视图。查看更新
【解决方案2】:

config/datatable.php(mysql 部分):

  1. strict 更改为false
  2. 添加/更改options - PDO::ATTR_EMULATE_PREPARES => true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    相关资源
    最近更新 更多