2016-03-07 117 views
4

完整的錯誤:Laravel錯誤:SQLSTATE [42S02]:基表或視圖沒有找到

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'quotesapp.admin' doesn't exist (SQL: select count(*) as aggregate from `admin` where `username` = Admin) 

我知道錯誤是名字之間的不匹配,因爲它出現在錯誤日誌和它是如何定義的無處不在其他(在數據庫文件夾中,但我無法解決問題,我搜索周圍,發現this後,但即使我實施解決方案(如下所示)後,我不斷得到相同的錯誤。 Laravel 5.2。我的數據庫目錄中有一個admins表,如下所示:

class CreateAdminsTable extends Migration 
{ 

    public function up() 
    { 
     Schema::create('admins', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->timestamps(); 
      $table->string('username')->unique(); 
      $table->string('password'); 
      $table->rememberToken(); 
     }); 
    } 

    public function down() 
    { 
     Schema::drop('admins'); 
    } 
} 

管理模式是這樣的:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 
use Illuminate\Auth\Authenticatable; 

class Admin extends Model implements \Illuminate\Contracts\Auth\Authenticatable 
{ 
    protected $table = 'admins'; 
    use Authenticatable; 
} 

?> 

這是導致拋出錯誤的相關路線:

Route::post('/admin/register', [ 
    'uses' => '[email protected]', 
    'as' => 'register' 
]); 

這裏是postRegister方法

public function postRegister(Request $request) { 

    $this->validate($request, [ 
     'username' => 'required|unique:admin|max:30|min:3', 
     'password' => 'required|min:5', 
     'password_confirm' => 'required'   
    ]); 

    $password = $request['password']; 
    $passwordConfirm = $request['password_confirm']; 

    if ($password !== $passwordConfirm) { 
     return redirect()->back()->with(['fail' => 'password fields do not match!']); 
    } 

    $admin = new Admin(); 
    $admin->username = $request['username']; 
    $admin->password = $request['password']; 
    $admin->save(); 

    return redirect()->route('index');  

} 

我已經在compo中運行php artisan migrate ser,但是我得到了「無法遷移」的迴應。我試圖通過作曲家刷新數據庫,但無濟於事。表'管理員'顯示在phpmyadmin中。

更新1:添加完整的錯誤消息

回答

7

這個錯誤來自驗證部分:

$this->validate($request, [ 
    'username' => 'required|unique:admin|max:30|min:3', 
    'password' => 'required|min:5', 
    'password_confirm' => 'required'   
]); 

當爲username你指的是admin數據庫表中的唯一性檢查,但是表被稱爲admins(用小號最後)。 因此Laravel正在尋找一個名爲admin的表,當然這個表不存在。最後加上s,它應該工作。

+0

@ Frosty619我也相信這是事實。將'unique:admin'更改爲'unique:admins'並讓我們知道這是否可行。 – samuraiseoul

+0

非常感謝,這個作品(: – Frosty619

1

嘗試特質後添加protected $table = 'admins';管理員模式。

+1

我不確定你的意思是「特質後」?我在'使用Authenticatable'之後添加了您建議的代碼行;'在我的管理模式中,但我得到同樣的錯誤。 – Frosty619

0

Laravel告訴你它找不到這樣的表格。

dd()是你的朋友。

$admin = new Admin(); 
dd($admin); 

檢查它的屬性表有什麼,它會以正確的方式指向你。

假設您的數據庫配置已正確設置?

此外,當您遷移數據庫並運行一個類時,它會將該步驟存儲在遷移表中。

因此,如果您想遷移更多東西,那麼您需要進行另一次遷移。

要進行更改,請使用Schema::table方法。

+0

我嘗試了您的建議,並且我收到以下回復「Class app \ Admin is not defined」,這是超級怪異的,因爲Admin是在app文件夾中定義的。 – Frosty619

+1

將其更改爲\ App \ Admin – oseintow

1

不確定是否相關,但我得到了該消息,因爲我的模型是與Db表不同的名稱。如果模型不是複數形式,則可以在模型中添加受保護的表格名稱。

+1

在模型類中添加受保護的表名。如下所述:protected $ table ='admins';在你的管理模式的頂部 – VineFreeman

相關問題