php - SQLSTATE[42S02]: Base table or view not found: 1146 Table 'laravel_abonamenty2.currencies' doesn't exist
I've got this error
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'laravel_abonamenty2.currencies' doesn't exist (SQL: select `id`, `currency`, `course` from `currencies`)
This is my controller which generate error. I don't know why Laravel is searching for currencies table. My table and migration is called Currencys.
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');
}
This is mine currency model:
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');
}
}
This is my Currencys migration
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');
}
}
Answer
Solution:
Because the plural of currency
is currencies and not currencys. Laravel automatically detects the table name of the snake case plural
name of the model. documentation
In your model you can specify another table name like:
protected $table = 'currencys';
With that laravel will search the currencys table.
Answer
Solution:
By convention, the "snake case", plural name of the class will be used as the table name unless another name is explicitly specified. https://laravel.com/docs/7.x/eloquent#eloquent-model-conventions
In your case, it converts the Currency
(model name) to plural currencies
. Therefore,if you want a custom table name,
You need to specify that name of the table in the model.
Currency Model
class Currency extends Model
{
protected $table="currency";
...
}
Source