【问题标题】:I am trying to insert some data into status table but getting SQL Query Error in Laravel我正在尝试将一些数据插入状态表,但在 Laravel 中出现 SQL 查询错误
【发布时间】:2021-06-23 20:25:14
【问题描述】:

我是 Laravel 的新手。我有一张表,该表名为 {status}。

在 Models\ Status.php 下,当我从 status.php 中删除 protected $table='status'; 时,我收到了这个错误!

Illuminate\Database\QueryException SQLSTATE[42S02]:基表或视图 未找到:1146 表 'cms.statuses' 不存在(SQL:插入 statuses (status, user_id, updated_at, created_at) 值 (dfg, 1, 2021-06-22 15:16:10, 2021-06-22 15:16:10))

这是我的表格架构

和 HomeController 功能

如果有人能解释一下,为什么我在不使用此行时会出现这种错误 => protected $table='status'; 谢谢!

【问题讨论】:

  • 查看laravel.com/docs/8.x/eloquent#table-names.you 会了解 laravel 模型的工作原理。 status 复数形式 statuses
  • 你有错字吗?看起来您的表被命名为“status”(单数),但正在插入“status”(复数)。
  • @JohnH 我添加了更多的 2 张图片、表格架构和控制器,以便您更好地理解,谢谢!
  • @JohnLobo 谢谢你的链接,我会读的。

标签: php mysql laravel


【解决方案1】:

为了更好地理解:

每个模型都是从use Illuminate\Database\Eloquent\Model; 扩展而来的,所以它有一个名为getTable() 的方法,如下所示

/**
  * Get the table associated with the model.
  *
  * @return string
  */
  public function getTable()
  {
     return $this->table ?? Str::snake(Str::pluralStudly(class_basename($this)));
  }

如果你看到这个:

  1. 首先它会检查您是否手动设置了表格属性。如果是,那么它将从protected $table='status'; 获取table name

  2. 假设如果您还没有设置属性,那么它将采用class name,然后将pluralize 名称转换为snake case

例如,在您的情况下,Model 名称是 Status

$response=Str::snake(Str::pluralStudly(class_basename("Status")));
dd($response);

结果将是statuses。所以它期望database中的statuses表。

例如考虑您的型号名称为UserDetail 然后

$response=Str::snake(Str::pluralStudly(class_basename("UserDetail")));
dd($response);

那么结果将是user_details。所以它期望数据库中有user_details 表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-04
    • 2015-10-22
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 2020-09-15
    • 2017-07-28
    相关资源
    最近更新 更多