Обновить запись связанной модели в Laravel - PullRequest
0 голосов
/ 27 марта 2019

Как обновить запись в связанной табличной модели по цепочечному выражению?

Это то, что я сейчас делаю (и это работает)

$user = User::find(1);

$token = Token::where('user_id', $user->id)->first();
$token->token = $request->token;
$token->save();

Но можно ли сделать вышеуказанное вболее элегантный способ, например?

$user = User::find(1);

$user->token()->token = $new_token;
$user->token()->save();

Моя модель пользователя

public function token()
{
    return $this->hasOne('App\Token');
}

Ответы [ 3 ]

2 голосов
/ 27 марта 2019

В одной строке:

User::find(1)->token()->update(['token' => $new_token]);

Просто знайте эти вещи перед использованием:

  • Функция поиска пользователя может вернуть null, если идентификатор пользователя не найден.
  • Сохраненные и обновленные события модели не будут запущены для обновленных моделей.
  • При выполнении метода обновления не выполняется методы Eloquent модели .

Однако в вашем конкретном случае я думаю, что это действительно, особенно если вы знаете, что идентификатор пользователя всегда будет действительным.

1 голос
/ 27 марта 2019

Йо может сделать это так:

User::find(1)->token()->update(['token' => $new_token]);

Или сделай это в тебе App\Token класс как этот:

User::find(1)->token()->update_token($new_token);

И Создание update_token Функция в App\Token Класс:

public function update_token(string $new_token)
{
      $this->update(['token'=>$new_token]);
}
0 голосов
/ 27 марта 2019
$user = User::with('token')->findOrFail(1);
$user->token->update(['token' => $request->token]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...