【问题标题】:Base table or view not found: 1146 Table Laravel 5未找到基表或视图:1146 表 Laravel 5
【发布时间】:2015-07-21 11:03:39
【问题描述】:

当我尝试使用 Laravel 5 将数据保存到 mysql 时出现此错误,其他表单和 save() 方法可以正常工作,但是这个:

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'sistemal5.cotizacions' doesn't exist (SQL: insert into `cotizacions` (`customer_id`, `total`, `updated_at`, `created_at`) values (1501, 150.69, 2015-05-11 03:16:25, 2015-05-11 03:16:25))

这是我的控制器存储方法:

public function store(CotFormRequest $request)
    {    
        $quote = new Cotizacion;
        $quote->customer_id = Input::get('data.clientid');
        $quote->total = Input::get('data.totalAftertax');    
        $quote->save();    
    }

这是我的模型:

<?php namespace App\Models\Cotizacion;

use Illuminate\Database\Eloquent\Model;


class Cotizacion extends Model {

}

我一定是忽略了一些非常明显的事情,因为我不明白为什么 Laravel 会添加一个“S”表是 cotizacion 而不是 cotizacions。

我该如何解决这个问题?

【问题讨论】:

    标签: php mysql laravel


    【解决方案1】:

    我猜 Laravel 无法确定您用于表名的单词的复数形式。

    只需在模型中指定您的表:

    class Cotizacion extends Model{
        public $table = "cotizacion";
    

    【讨论】:

    • 问题是 laravel 正在添加 'S',为什么?
    • 这是 Laravel 的标准。默认情况下,它们使用复数形式的表名(即模型 Business 用于表 businesses)。如果你不喜欢,你需要手动指定你的表名。
    • 如果您需要澄清,请参阅 Eloquent docs here
    • 对我来说最奇怪的是,我有两张桌子,eqtypesequipments,猜猜谁的 laravel 无法确定它的复数?!是equipments
    • 那是因为设备的复数形式是设备
    【解决方案2】:

    检查你的迁移文件,也许你正在使用 Schema::table,像这样:

    Schema::table('table_name', function ($table)  {
        // ...
    });
    

    如果要创建新表,必须使用 Schema::create:

    Schema::create('table_name', function ($table)  {
        // ...
    });
    

    【讨论】:

      【解决方案3】:

      我在 laravel 5.2 也遇到过这个问题,如果声明表名不起作用,可能是因为你在请求中声明错误或验证代码错误(如果你正在使用)

      【讨论】:

        【解决方案4】:

        如果你的错误与问题无关

        Laravel 无法确定您所使用的单词的复数形式 表名。

        this solution

        仍然有这个错误,试试我的方法。您应该在默认的 "AppServiceProvider.php" 或其他 专门为该应用程序定义的 ServiceProviders,甚至在 App\Console 的 Kernel.php

        这个错误发生在我身上,我暂时解决了它,但仍然无法弄清楚确切的起源和描述。

        在我的情况下,导致我的表无法迁移的主要问题是我在 boot() 方法中的 "PermissionsServiceProvider.php" 上运行了代码/查询。

        同样,也许你在 AppServiceProvider.php 的 boot() 方法或 Kernel.php 中定义了一些东西

        因此,首先检查您的 Serviceproviders 并禁用代码一段时间,然后运行 ​​php artisan migrate 然后撤消代码中的更改。

        【讨论】:

        • 谢谢你,为我工作。
        【解决方案5】:

        只需运行命令:

        php artisan migrate:refresh --seed
        

        【讨论】:

        • 这在数据库完全为空并且需要 Laravel 生成表结构时很有用。
        【解决方案6】:

        我在执行迁移时也遇到了这个问题 => 执行 php artisan migrate:refresh --seed 命令后

        “未找到基表或视图:1146 表帖子不存在” 我解决了它,我在一个单独的迁移文件中使用了“软删除”,而我负责创建“posts”表的“posts”表的原始迁移是在数据库中的“软删除”迁移之后执行的迁移文件夹,我只需要重命名“posts”迁移文件名并将其放在“softdeletes”迁移之前以更快地执行。 再次进行迁移 => php artisan migrate:refresh --seed 完成。

        【讨论】:

          【解决方案7】:

          当您在控制器方法中传递自定义请求时,并且您的请求文件没有遵循正确的语法或更改了表名,那么 laravel 就会出现这种类型的异常。我将在示例中向您展示。

          My Request code.
               public function rules()
                  {
                      return [
                          'name' => 'required|unique:posts|max:50',
                          'description' => 'required',
                      ];
                  }
          
          But my table name is todos not posts so that's why it through "Base table or view not found: 1146 Table Laravel 7
          
          
              I forgot to change the table name in first index.
               public function rules()
                  {
                      return [
                          'name' => 'required|unique:todos|max:50',
                          'description' => 'required',
                      ];
                  }
          

          【讨论】:

            【解决方案8】:

            这个问题是由于拼写错误未定义的数据库名称。确保您的数据库名、表名和所有列名与 phpmyadmin 中的相同。

            谢谢

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-05-30
              • 1970-01-01
              • 2018-03-16
              • 2019-01-28
              • 2017-08-02
              • 2016-07-15
              • 1970-01-01
              • 2014-02-25
              相关资源
              最近更新 更多