2017-08-08 129 views
0

請有人幫我解決這個問題。我是laravel的新手,現在我需要將選擇標記的數組存儲到mysql,並且我有這個erorr。 SQLSTATE [42S02]:未找到基本表或視圖:1146'cmsystem.account_code_project'不存在(SQL:從account_code_project中選擇account_code_ac_id,其中project_pj_id = 1)。似乎它與使用belongsToMany()函數有關。我應該在這裏做什麼是我的代碼。SQLSTATE [42S02]:未找到基本表或視圖(belongsToMany)Laravel 5.4

這裏的project_table

//project table 
     Schema::create('projects', function(Blueprint $table) 
    { 
     $table->increments('pj_id'); 
     $table->string('pj_title',100); 
     $table->string('pj_description'); 
    }); 

這裏的accountcodes表

//codes 
     Schema::create('accountcodes', function(Blueprint $table) 
    { 
     $table->increments('ac_id'); 
     $table->string('ac_code',100)->nullable(); 
     $table->string('ac_description')->nullable(); 
    }); 

這裏的中間表的兩個表

//intermediate table 
    Schema::create('code_project', function(Blueprint $table){ 
     $table->increments('id'); 
     $table->integer('project_id')->unsigned(); 
     $table->foreign('project_id')->references('pj_id')->on('projects'); 

     $table->integer('account_id')->unsigned(); 
     $table->foreign('account_id')->references('ac_id')->on('accountcodes'); 
    }); 

項目控制器

//ProjectController 
    public function store(Request $request) 
    { 
    $this->validate($request,[ 
     'pj_title'=>'required', 
     'pj_description'=>'required', 
     ]); 

    $project = new project; 
    $project->pj_title = $request->pj_title; 
    $project->pj_description = $request->pj_description; 
    $project->save(); 

    $project->accounts()->sync($request->accounts, false); 
    return redirect('/projectlist'); 
    } 

模型

//AccountCode 
    protected $table = 'accountcodes'; 
    public function projects() 
{ 
    return $this->belongsToMany('App\Project'); 
} 

//Project 
    protected $table = 'projects'; 
    public function accounts() 
{ 
    return $this->belongsToMany('App\AccountCode'); 
} 

謝謝。

回答

0

可以在belongsToMany

return $this->belongsToMany('App\AccountCode',"code_project"); 

提示表名。這是因爲按照慣例透視表應該被命名爲:accountcode_project(這也並不反映本應是型號名稱Accountcode

+0

我應該需要指定它在我的兩個模型來解決呢?我的意思是這樣的 返回$ this-> belongsToMany('App \ Project','code_project'); return $ this-> belongsToMany('App \ AccountCode','code_project'); – kalawadei

+0

@ClaudeDizon是的,無論你需要使用該數據透視表。問題是你沒有遵循命名約定。 – apokryfos

+0

在belongsToMany標記中添加「code_project」不會改變任何內容,所以我所做的是將表名更改爲「accountcode_project」。仍然錯誤仍然是一樣的。我沒有看到任何錯誤。我該怎麼辦?對不起,謝謝。 – kalawadei

0

這是因爲你必須指定模型關係的透視表名:

return $this->belongsToMany('App\Project', 'code_project'); 

否則Eloquent會嘗試按照其約定檢測默認表名,我鼓勵您遵循該約定。

+0

我是否需要指定它在我的模型?我的意思是這樣的 返回$ this-> belongsToMany('App \ Project','code_project'); return $ this-> belongsToMany('App \ AccountCode','code_project'); – kalawadei

+0

是的好友 - https://laravel.com/docs/5.4/eloquent-relationships#many-to-many – xyzale

+0

在belongsToMany標籤中添加「code_project」不會改變任何東西,所以我做的是我將表名改爲「 accountcode_project」。仍然錯誤仍然是一樣的。我沒有看到任何錯誤。我該怎麼辦?對不起,謝謝 – kalawadei

0

好嗎我通過聲明兩個模型都代表,所以它看起來像這樣

//AccountCode 
     public function projects() 
{ 
    return $this->belongsToMany('App\Project', 'accountcode_project', 'ac_id', 'pj_id'); 
} 


// Project 
    public function accountcodes() 
{ 
    return $this->belongsToMany('App\AccountCode', 'accountcode_project', 'pj_id', 'ac_id'); 
} 
相關問題