我的目标。 我有3个Laravel机型:用户,活动和campaign_players。我想获取关于用户的信息,以及他/她正在玩的活动。Laravel枢轴表未找到
问题所在。 当我运行此查询:
$campaigns = user::with(['campaigns_playing'])->where('id', $id)->get();
它给了我这个消息:
“基表或视图未找到:1146表 'sagohamnen.campaign_players' 不存在(SQL:从
sh_campaigns
内加入 选择sh_campaigns
。*,campaign_players
。user_id
为pivot_user_id
,campaign_players
。id
为上sh_campaigns
。id
=campaign_players
。id
其中campaign_players
。user_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']);
});
看起来可能有几件事错在这里。你得到的第一个错误是'campaign_players'表不存在。从你发布的代码看来,你已经命名了表sh_campaign_players。 – tam5
感谢您的评论。是的,我写了模型的名字,叫做campaign_players。你的意思是我应该写MySql表名而不是模型? – Olof84
@Ruffles说如何传递表的名字是正确的。另外,我会鼓励你阅读Laravel [docs](https://laravel.com/docs/5.2/eloquent-relationships)。有一些鼓励的惯例。比如在这种情况下调用数据透视表'campaign_user'。 – tam5