【发布时间】: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.idaspivot_idfromsh_campaigns内部连接campaign_playersonsh_campaigns.id=campaign_players.id其中campaign_players.user_idin (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]。但同样,只是一个建议,做对你的情况有意义的事情:)
标签: laravel eloquent foreign-keys tablename