2015-10-23 3 views
2

Когда я хочу, чтобы сохранить реакцию на билет я три таблицы (в Laravel):Добавить значения сводной таблицы Laravel

-Tickets 
-Reaction 
-Reaction_Tickets (pivot table) 

Когда я хочу, чтобы сохранить реакцию я делаю это так:

public function addReaction(Request $request, $slug) 
    { 
     $ticket = Ticket::whereSlug($slug)->firstOrFail(); 
     $reaction = new reactions(array(
      'user_id' => Auth::user()->id, 
      'content' => $request->get('content') 
      )); 

     return redirect('/ticket/'.$slug)->with('Reactie is toegevoegd.'); 
    } 

Но теперь, конечно, он не добавляется в сводную таблицу. И я не могу добавить его, потому что у меня нет модели. Каков правильный способ сделать это?

EDIT:

-Tickets 

public function reactions() 
{ 
    return $this->belongsToMany('App\reactions'); 
} 

-Reactions 

public function tickets() 
{ 
    return $this->hasOne('App\tickets'); 
} 
+0

Можете ли вы представить свои определения отношений для этих трех моделей? –

+0

Я продемонстрировал это в своем ответе, но имейте в виду, что обратное значение 'принадлежит ToMany' для отношения« многие ко многим »также« принадлежит многому », так как многие« Билеты »могут иметь много« Реакций ». –

+0

Oke, но реакция может иметь только один билет? Я бы сказал, что реакция не принадлежит ко многим билетам. – Jamie

ответ

5

Из документации Laravel, вам необходимо сохранить и приложить Reaction к Ticket:

$reaction = new reactions(array(
    'user_id' => Auth::user()->id, 
    'content' => $request->get('content') 
)); 
$reaction->save(); // Now has an ID 
$tickets->reactions()->attach($reaction->id); 

В вашей Ticket модели, вы должны иметь отношения определены:

class Ticket extends Model { 
    protected $table = "tickets"; 

    public function reactions(){ 
     return $this->belongsToMany("App\Reaction"); 
    } 
} 

A го вы должны иметь обратный, определенный на Reaction:

class Reaction extends Model { 
    protected $table = "reactions"; 

    public function tickets(){ 
     return $this->belongsToMany("App\Ticket"); 
    } 
} 

Если ваши модели настройки, как это так, вы не должны иметь какой-либо вопрос прикреплять новый Reaction в существующую Ticket с помощью сводной таблицы.

+0

Спасибо за ваш ответ, но почему мне только нужно прикрепить идентификатор реакции, а не userId? – Jamie

+0

Почему вопрос пользователя «Реакция» в билете? Я предполагаю, что ваша сводная таблица имеет следующую структуру: 'ticket_id, реакция_id'. Таким образом, «прикрепить» к ним вставьте запись для этих столбцов в сводную таблицу. –

+0

Да, извините, я имею в виду ticket_id -_- – Jamie

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