未找到 Laravel 数据透视表
Posted
技术标签:
【中文标题】未找到 Laravel 数据透视表【英文标题】:Laravel Pivot table not found 【发布时间】:2016-08-19 13:24:41 【问题描述】:我的目标。 我有 3 个 Laravel 模型:user、campaign 和 campaign_players。我想获取有关用户的信息,以及他/她正在玩的广告系列。
问题。 当我运行此查询时:
$campaigns = user::with(['campaigns_playing'])->where('id', $id)->get();
它给了我这个信息:
"未找到基表或视图:1146 表 'sagohamnen.campaign_players' 不存在(SQL:选择
sh_campaigns
.*,campaign_players
.user_id
如pivot_user_id
,campaign_players
.id
aspivot_id
fromsh_campaigns
内部连接campaign_players
onsh_campaigns
.id
=campaign_players
.id
其中campaign_players
.user_id
in (2))"
由于某种原因,它似乎找不到表名。你们知道导致问题的原因以及如何解决它吗?
这是来自我的模型和它的数据库表的简短代码。
用户
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
。
感谢您的评论。是的,我写了模型的名称,叫做campaign_players。你的意思是我应该写 mysql 表名而不是模型?
@Ruffles 关于如何传递表名的说法是正确的。此外,我鼓励您阅读 Laravel docs。有一些鼓励的约定。比如在这种情况下调用数据透视表campaign_user
。
谢谢。我考虑将其更改为campaign_users,但我认为campaign_player 更符合我的目的。
我当然同意根据您的情况命名事物是一个好主意。由于它是 Laravel 的约定,例如,如果您要使用 campaign_user
,您只需将一个参数传递给您的 belongsToMany
,Laravel 将暗示其余的,而不是您需要明确说明所有内容。 [而且您仍然可以将方法命名为您认为合适的名称,例如 campaignsPlaying
]。但同样,只是一个建议,做对你的情况有意义的事情:)
【参考方案1】:
将透视表名称作为第二个参数传递给 belongsToMany() 方法。它要求一个字符串,而不是模型类路径。
将Sagohamnen\campaign\campaign_players
更改为sh_campaign_players
(或数据库中数据透视表的名称)
【讨论】:
以上是关于未找到 Laravel 数据透视表的主要内容,如果未能解决你的问题,请参考以下文章