Моя цель. У меня есть 3 модели Laravel: пользователь, кампания и campaign_players. Я хочу получить информацию о пользователе, а также о кампаниях, которые он играет.Laravel Сводный стол не найден
Проблема. Когда я запускаю этот запрос:
$campaigns = user::with(['campaigns_playing'])->where('id', $id)->get();
это дает мне это сообщение:
«Base таблицы или просмотреть не найдено: 1146 Таблица 'sagohamnen.campaign_players' не существует (SQL: выберите
sh_campaigns
. *,campaign_players
.user_id
какpivot_user_id
,campaign_players
.id
вpivot_id
отsh_campaigns
внутреннего соединенияcampaign_players
наsh_campaigns
.id
=campaign_players
.id
гдеcampaign_players
.user_id
в (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'. – tam5
Спасибо, что комментировали. Да, я написал название модели, называемой campaign_players. Вы имеете в виду, что я должен написать имя таблицы MySql вместо модели? – Olof84
что @Ruffles говорит правильно, как передать имя таблицы. Кроме того, я бы посоветовал вам прочитать Laravel [docs] (https://laravel.com/docs/5.2/eloquent-relationships). Существуют определенные конвенции, которые поощряются. В этом случае вызывать сводную таблицу 'campaign_user'. – tam5