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

Posted

技术标签:

【中文标题】SQLSTATE [42S02]:未找到基表或视图:1146 表 \'laravel_abonamenty2.currencies\' 不存在【英文标题】:SQLSTATE[42S02]: Base table or view not found: 1146 Table 'laravel_abonamenty2.currencies' doesn't existSQLSTATE [42S02]:未找到基表或视图:1146 表 'laravel_abonamenty2.currencies' 不存在 【发布时间】:2020-11-19 01:40:53 【问题描述】:

我遇到了这个错误

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'laravel_abonamenty2.currencies' doesn't exist (SQL: select `id`, `currency`, `course` from `currencies`)

这是我的控制器,它会产生错误。我不知道 Laravel 为什么要搜索货币表。我的表和迁移称为 Currency。

public function create()

    $users = User::all('showname', 'id');
    $forms = Form::all('id', 'form');
    $currencys = Currency::all('id', 'currency', 'course');
    return view('invoices.create')->with('users', $users, 'forms', 'currencys');

这是我的货币模型:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Currency extends Model

    protected $fillable = [
        'id', 'currency', 'course',
    ];

    public function invoice()
    
        return $this->belongsTo('App\Invoice');
    

    public function proform()
    
        return $this->belongsTo('App\Proform');
    

这是我的货币迁移

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class Currencys extends Migration

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    
        Schema::create('currencys', function (Blueprint $table) 
            $table->increments('id');
            $table->string('currency')->nullable();
            $table->string('course')->nullable();
            $table->timestamps();
        );
    

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    
        Schema::dropIfExists('currencys');
    

【问题讨论】:

【参考方案1】:

因为currency 的复数形式是currencies,而不是currency。 Laravel 自动检测模型的snake case plural 名称的表名。 documentation

在您的模型中,您可以指定另一个表名,例如:

protected $table = 'currencys';

使用该 laravel 将搜索货币表。

【讨论】:

【参考方案2】:

按照约定,“snake case”,将使用类的复数名称 作为表名,除非明确指定另一个名称。 https://laravel.com/docs/7.x/eloquent#eloquent-model-conventions

在您的情况下,它将Currency(型号名称)转换为复数currencies。因此,如果你想要一个自定义的表名,

您需要在模型中指定该表的名称。

货币模型

class Currency extends Model

  protected $table="currency";
...

【讨论】:

以上是关于SQLSTATE [42S02]:未找到基表或视图:1146 表 'laravel_abonamenty2.currencies' 不存在的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

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

创建类别并重定向到 category.index 后,在 laravel 中找不到基表或视图