2017-01-10 2 views
0

Я работаю над уведомлениями У меня есть 2 таблицы: один - notify, а другой - notify_status. Через уведомление я показываю данные, такие как title и description и в notify_status У меня есть поле read_status, которое по умолчанию 0. После того, как я покажу его, я хочу изменить его на 1. У меня также есть notify_id в качестве внешнего ключа. Это мой show метод:Невозможно создать данные с помощью метода show в Laravel 5.3

public function show($id) 
{ 
    $notify  = Notify::find($id); 
    $notify_status = NotifyStatus::where('notify_id', $id)->get(); 

    $user_data['read_status'] = 1; 
    $user = NotifyStatus::create($user_data); 

    return view('notify.desr')->with(compact('notify')); 
} 

Но это не создает против notify_id. Что мне делать?

+1

Вы не хотите создавать, вы хотите обновить его! '$ notify_status-> update (['read_status' => 1]);' - В противном случае это не имеет смысла. – Quasdunk

+0

он говорит, что метод обновления не существует –

+1

Да, правильно - это также должно быть 'NotifyStatus :: где ('notify_id', $ id) -> first();', потому что 'get()' возвращает Collection, а не модель , Кроме того, если вы связали свои модели с отношениями, весь метод должен быть одной строкой кода: '$ notify = Notify :: find ($ id) -> notify_status-> update (['read_status' => 1]); '(Я предполагаю, что у вас есть соотношение 1: 1 между Notify и NotifyStatus, а отношение к Notify-модели называется« notify_status »). – Quasdunk

ответ

0

Ваши модели должны быть определены следующие соотношения:

class Notify extends Model 
{ 
    public function setAsRead() 
    { 
     $this->status->read_status = 1 
     $this->status->save(); 
    } 

    public function wasRead() 
    { 
     return (bool) $this->status->read_status; 
    } 

    public function status() 
    { 
     return $this->hasOne(NotifyStatus::class); 
    } 
} 

class NotifyStatus extends Model 
{ 
    public function notify() 
    { 
     return $this->belongsTo(Notify::class); 
    } 
} 

Взгляните на Laravel Eloquent Relationships для дальнейшего чтения.

В контроллере вы можете использовать его как:

$notify = Notify::find($id); 

$notify->status->read_status = 1; 
$notify->status->save(); 

return view('notify.desr')->with(compact('notify')); 

Или вы можете просто создать новый метод, чтобы установить новый статус (обратите внимание на первый метод Notify класса):

$notify = Notify::find($id); 

$notify->setAsRead(); 

return view('notify.desr')->with(compact('notify')); 
+0

что такое статус во втором методе –

+0

во втором методе говорит, что save не существует –

0
public function show($id) 
{ 
    $notify  = Notify::find($id); 
    $notify_status = NotifyStatus::where('notify_id', $id)->first(); 

    $notify_status->read_status = 1; 
    $notify_status->save() 

    return view('notify.desr')->with(compact('notify')); 
} 
Смежные вопросы