2017-08-08 4 views
0

Aidez-moi s'il vous plaît à m'aider. Je suis nouveau à laravel et maintenant j'ai besoin de stocker un tableau à partir d'une balise de sélection à mysql et j'ai cette erorr. SQLSTATE [42S02]: Table de base ou vue introuvable: 1146 Le tableau 'cmsystem.account_code_project' n'existe pas (SQL: sélectionnez account_code_ac_id de account_code_projectproject_pj_id = 1). On dirait que cela a quelque chose à voir avec l'utilisation de belongsToMany() fucntion. Que dois-je faire ici est mon code.SQLSTATE [42S02]: Table de base ou vue non trouvée (belongsToMany) Laravel 5.4

est ici le project_table

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

est ici la table accountcodes

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

est ici la table intermédiaire pour les deux tables

//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'); 
    }); 

Contrôleur de projet

//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'); 
    } 

modèles

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

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

Merci.

Répondre

0

Vous pouvez laisser entendre le nom de la table dans belongsToMany

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

En effet, par convention, votre tableau croisé dynamique aurait dû être nommé: accountcode_project (ce qui ne reflète pas votre nom de modèle qui aurait dû être Accountcode)

+0

dois-je besoin de le préciser à la fois de mon modèle? Je veux dire comme ceci return $ this-> belongsToMany ('App \ Project', 'code_project'); return $ this-> belongsToMany ('App \ AccountCode', 'code_project'); – kalawadei

+0

@ClaudeDizon oui, partout où vous avez besoin d'utiliser ce tableau croisé dynamique. Le problème est que vous ne suivez pas les conventions de nommage. – apokryfos

+0

en ajoutant "code_project" sur la balise belongsToMany ne change rien alors ce que j'ai fait c'est que j'ai changé le nom de la table en "accountcode_project". Et toujours l'erreur est toujours la même. Je ne vois aucune erreur à ce sujet. que ferais-je? désolé et merci. – kalawadei

0

Cela se produit parce que vous devez spécifier le nom de tableau croisé dynamique en relation modèle:

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

Sinon, Eloquent essaie de détecter le nom de table par défaut en suivant ses conventions, que je vous encourage à suivre.

+0

si je dois le spécifier sur les deux de mon modèle?Je veux dire comme ceci return $ this-> belongsToMany ('App \ Project', 'code_project'); return $ this-> belongsToMany ('App \ AccountCode', 'code_project'); – kalawadei

+0

Oui mon pote - https://laravel.com/docs/5.4/eloquent-relationships#many-to-many – xyzale

+0

en ajoutant "code_project" sur belongsToMany tag ne change rien alors ce que j'ai fait c'est que j'ai changé le nom de la table pour " accountcode_project ". Et toujours l'erreur est toujours la même. Je ne vois aucune erreur à ce sujet. que ferais-je? désolé et merci – kalawadei

0

bien je l'ai résolu en déclarant à la fois le représentant à la fois le modèle afin qu'il ressemble à ce

//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'); 
}