2016-08-19 121 views
0

我的目标。 我有3个Laravel机型:用户,活动campaign_players。我想获取关于用户的信息,以及他/她正在玩的活动。Laravel枢轴表未找到

问题所在。 当我运行此查询:

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

它给了我这个消息:

“基表或视图未找到:1146表 'sagohamnen.campaign_players' 不存在(SQL:从sh_campaigns内加入 选择 sh_campaigns。*,campaign_playersuser_idpivot_user_idcampaign_playersid为上sh_campaignsid = campaign_playersid 其中campaign_playersuser_id(2))”

看起来它找不到表名,出于某种原因,难道你们有什么想法是什么造成的问题,以及如何解决它?

这里从我的模特和it's数据库表短代码段。

用户

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

活动

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

看起来可能有几件事错在这里。你得到的第一个错误是'campaign_players'表不存在。从你发布的代码看来,你已经命名了表sh_campaign_players。 – tam5

+0

感谢您的评论。是的,我写了模型的名字,叫做campaign_players。你的意思是我应该写MySql表名而不是模型? – Olof84

+0

@Ruffles说如何传递表的名字是正确的。另外,我会鼓励你阅读Laravel [docs](https://laravel.com/docs/5.2/eloquent-relationships)。有一些鼓励的惯例。比如在这种情况下调用数据透视表'campaign_user'。 – tam5

回答

1

传递枢轴表的名称作为第二个参数belongsToMany()方法。它要求一个字符串,而不是一个模型类路径。

变化Sagohamnen\campaign\campaign_playerssh_campaign_players(或任何你透视表的名称是在数据库中)