2016-08-19 7 views
0

Mon objectif. J'ai 3 modèles Laravel: utilisateur, campagne et campaign_players. Je veux obtenir des informations sur un utilisateur, ainsi que sur les campagnes qu'il/elle joue.Laravel Tableau croisé dynamique introuvable

Le problème. Quand je lance cette requête:

$campaigns = user::with(['campaigns_playing'])->where('id', $id)->get(); 

il me donne ce message:

« table de base ou vue non trouvée: 1146 Tableau 'sagohamnen.campaign_players' n'existe pas (SQL: sélectionnez sh_campaigns. *, campaign_players. user_id comme pivot_user_id, campaign_players. id comme pivot_id de sh_campaigns jointure interne campaign_players au sh_campaigns. id = campaign_players. idcampaign_players. user_id en (2)) »

On dirait qu'il ne trouve pas le nom de la table, pour une raison quelconque. Avez-vous les gars ont une idée de ce que la cause du problème et comment y remédier?

ici sont des morceaux de code court de mes modèles et eSt tables de base de données.

utilisateur

protected $table = 'sh_users'; 
public function campaigns_playing() 
{ 
     return $this->belongsToMany('Sagohamnen\campaign\campaign', 'Sagohamnen\campaign\campaign_players', 'user_id', 'id'); 
} 

Schema::create('sh_users', function (Blueprint $table) { 
     $table->increments('id')->unsigned(); 
     $table->string('name', 255); 
}); 

Campagne

protected $table = 'sh_campaigns'; 

Schema::create('sh_campaigns', function (Blueprint $table) { 
     $table->increments('id')->unsigned(); 
     $table->string('name', 255);    
     $table->timestamps(); 
}); 

Campaign_players

protected $table = 'sh_campaign_players'; 

Schema::create('sh_campaign_players', function (Blueprint $table) { 
     $table->integer('user_id')->unsigned(); 
     $table->integer('campaign_id')->unsigned(); 
     $table->date('date'); 
     $table->primary(['user_id', 'campaign_id']); 
}); 
+0

il semble que il peut y avoir quelques petites choses mal ici. La première erreur que vous obtenez est que la table 'campaign_players' n'existe pas. Du code que vous avez posté, il semble que vous avez nommé la table 'sh_campaign_players'. – tam5

+0

Merci d'avoir commenté. Oui, j'ai écrit le nom du modèle, appelé campaign_players. Vous voulez dire que je devrais écrire le nom de la table MySql au lieu du modèle? – Olof84

+0

ce que @Ruffles dit est correct sur la façon de passer le nom de la table. En outre, je vous encourage à lire le Laravel [docs] (https://laravel.com/docs/5.2/eloquent-relationships). Il y a certaines conventions qui sont encouragées. Telles que l'appel de la table pivotante 'campaign_user' dans ce cas. – tam5

Répondre

1

passer le nom de la table pivotante en tant que deuxième paramètre de la méthode belongsToMany(). Il demande une chaîne, pas un chemin de classe de modèle.

changement Sagohamnen\campaign\campaign_players à sh_campaign_players (ou quel que soit le nom de votre tableau croisé dynamique est dans la base de données)