2017-03-16 31 views
1

php artisan make:migrationコマンドでテーブルを作成します。その後、私は移行ファイルを編集して列を挿入し、標準データを挿入します。 php migrate:refereshコマンドを実行した後、私はデータベースに行き、テーブルに正しい名前とデータがあります。Laravel - テーブルが存在しません

データベースでは、テーブル名はrolesStemsです。

私はこのようなモデルを作成:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class RolesStems extends Model 
{ 
    protected $fillable = ['id', 'value', 'order', 'active','id_stem', 'id_role']; 
} 

をそして、私のコントローラで私はこれを行う:

use App\RolesStems as RolesStem; 
RolesStem::select('value')->where('active', '=', 1)->where('id_stem', '=', 1)->orderBy('id_role', 'asc')->get()); 

を、私はこのエラーを持っている:

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'dbname.roles_stems' doesn't exist (SQL: select `value` from `roles_stems` where `active` = 1 and `id_stem` = 1 order by `id_role` asc) 

それは未知のを置きますテーブル名roles_stems、なぜ?

私はこれを他のテーブルにも同様にしますが、このテーブルではこれが起こります。

何が問題ですか?あなたがLaravel naming conventionsに従わないので

答えて

3

、手動でテーブルを定義する必要があります。名前のテーブルの場合

protected $table = 'your_table_name'; 
+1

Works!ありがとうございました – user3242861

3

rolesStemsあなたmodel名前を持っている必要がありますRolesStem

だから、次の行を変更します。

class RolesStems extends Model 

~

class RolesStem extends Model 

これがデフォルトLaravelが慣例命名である:あなたがあなたのモデルに次のコードを配置し、その後、この命名規則に従うことをしたくない場合はReference

を:

protected $table = 'your_table_name'; 

ようにするにはあなたのモデルがyour_table_name

1

@ user3242861を指しています。デフォルトでは、Laravelがあなたのモデルクラス名に従ってテーブルを見つけようとします:あなたのクラス "RolesStems" thテーブル "roles_stems"を見つけようとします。それが利用できない場合は、テーブルまたはビューが存在しません。

デフォルトの機能をオーバーライドするには、モデルクラスで明示的にテーブル名を以下のように定義します。

protected $table = 'your_table_name';