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
commepivot_user_id
,campaign_players
.id
commepivot_id
desh_campaigns
jointure internecampaign_players
aush_campaigns
.id
=campaign_players
.id
oùcampaign_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']);
});
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
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
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