未找到基表或视图:1146 表 Laravel 5

Posted

技术标签:

【中文标题】未找到基表或视图:1146 表 Laravel 5【英文标题】:Base table or view not found: 1146 Table 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。

我该如何解决这个问题?

【问题讨论】:

【参考方案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 中的相同。

谢谢

【讨论】:

以上是关于未找到基表或视图:1146 表 Laravel 5的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE [42S02]:未找到基表或视图:1146表'softwareproject.o_r_f_o_l_s'在laravel中不存在错误

未找到基表或视图:1146 表“epharmacy.medicines”不存在

未找到基表或视图:1146 表 'admin.model' 不存在

SQLSTATE [42S02]:未找到基表或视图:1146 表 'pdone.BaseUser' 不存在

SQLSTATE [42S02]:未找到基表或视图:1146 表 'hr.staff' 不存在

Laravel 5.2 未找到基表或视图错误