2016-08-19 3 views
0

Моя цель. У меня есть 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']); 
}); 
+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

Pass имя сводной таблицы в качестве второго параметра метода belongsToMany(). Он запрашивает строку, а не путь класса модели.

Изменение Sagohamnen\campaign\campaign_players к sh_campaign_players (или что имя сводной таблицы в базе данных)

Смежные вопросы