Обновление стержня отношений в laravel - PullRequest
0 голосов
/ 25 марта 2020

Я пытался обновить сводную информацию из отношений отношения с laravel. Я пробовал два разных способа: 1) $ message-> notification-> users-> first () -> pivot-> read = 1; $ message-> save ();

2)

$message->notifications->users->first()->updateExistingPivot($user, ['read' => 1]);

Первый не будет работать, без ошибок, просто не обновляется. Второй выдает ошибку:

Call to undefined method App\User::updateExistingPivot();

Мои отношения выглядят так в моих моделях:

Пользователь. php

public function notifications()
{
    return $this->belongsToMany('App\Notification','users_notifications')->withPivot('read')->wherePivot('read',0);
}

Уведомление. php

public function users()
{
    return $this->belongsToMany('App\User', 'users_notifications')->withPivot('read');
}

Сообщение. php

public function notifications()
{
    return $this->belongsTo('App\Notification','id');
}

Я застрял здесь, пожалуйста, помогите!

1 Ответ

0 голосов
/ 25 марта 2020

Если вам нужно обновить существующую строку в сводной таблице, вы можете использовать метод updateExistingPivot. Этот метод принимает сводную запись внешний ключ и массив атрибутов для обновления

Так что если вы хотите обновить все уведомления одного пользователя. updateExistingPivot здесь нельзя использовать.

Однако вы можете попробовать использовать newPivotStatement для отношения notifications(), newPivotStatement найдет все записи в сводной таблице, поэтому вам нужно использовать where отфильтровать нужные записи.

$user->notifications()
     ->newPivotStatement()
     ->where('user_id', $user->id)
     ->update(['read' => 1]);

Или эффективный способ с помощью Query-Builder :

\DB::table('users_notifications')
   ->where('user_id', $user_id)
   ->update(['read' => 1]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...