2016-07-23 4 views
3

Делаю систему опроса и у меня есть две таблицы:Laravel 5 с помощью сводной таблицы с hasMany отношений

  • polls таблицу: Имеет те поля (id,question,created_at,updated_at).

  • choices стол: Имеет эти поля (id,poll_id,choice).

И сводная таблица с именем choice_poll: Имеет те поля (id,choice_id,poll_id,ip,name,phone, comment ,created_at,updated_at)

Опрос Модель:

class Poll extends Model 
{ 

    protected $table = 'polls'; 
    protected $fillable = ['question']; 
    public $timestamps = true; 

    public function choices() 
    { 
     return $this->BelongsToMany('App\Choice')->withPivot('ip','name','phone','comment'); 
    } 
} 

Выбор модель:

class Choice extends Model 
{ 

    protected $table = 'choices'; 
    protected $fillable = ['poll_id','choice']; 
    public $timestamps = false; 

    public function poll() 
    { 
     return $this->belongsTo('App\Poll')->withPivot('ip','name','phone','comment'); 
    } 
} 

Теперь, когда я пытаюсь построить этот запрос не возвращает выбор:

$poll->first()->choices()->get() 

PS: Существует много вариантов в таблице вариантов, связанную с первым опросом.

ответ

0

Это:

public function poll() 
{ 
    return $this->belongsTo('App\Poll')->withPivot('ip','name','phone','comment'); 
} 

и

public function choices() 
{ 
    return $this->BelongsToMany('App\Choice')->withPivot('ip','name','phone','comment'); 
} 

должно быть:

public function poll() 
{ 
    return $this->belongsToMany('App\Poll')->withPivot('ip','name','phone','comment'); 
} 

и

public function choices() 
{ 
    return $this->belongsToMany('App\Choice')->withPivot('ip','name','phone','comment'); 
} 
+0

, но выбор принадлежит только одному опросу не многим! кстати, даже если я изменил код, как вы уже ничего не сказали –

1

В этом случае у вас есть Many To Many отношения так пытаются изменить belongsTo в:

public function poll() 
{ 
    return $this->belongsTo('App\Poll')->withPivot('ip','name','phone','comment'); 
} 

Для belongsToMany, и это будет:

public function poll() 
{ 
    return $this->belongsToMany('App\Poll')->withPivot('ip','name','phone','comment'); 
} 

Примечание 1: Вы должны изменить BelongsToMany к belongsToMany обратите внимание: B должен быть в нижнем регистре.

Примечание 2: Вы хотите сводную таблицу с timestapms create_at,updated_at, как вы упомянули в ОПАХ-м, так что вы должны использовать withTimestamps();:

return $this->belongsToMany('App\Poll') 
      ->withPivot('ip','name','phone','comment') 
      ->withTimestamps(); 

//AND in the other side also 

return $this->belongsToMany('App\Choice') 
      ->withPivot('ip','name','phone','comment') 
      ->withTimestamps(); 

Надеются, что это помогает.

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