web-dev-qa-db-ja.com

laravelで関係コレクションをリロードするにはどうすればよいですか?

Laravelでは、attach()またはdetach()を使用してリレーションに何かを追加または削除した後、コレクションは変更されていません。そのため、[1, 2]を含むリアライゼーションのモデルがある場合、この後:

$model->relation()->detach(1);
$model->relation()->attach(3);

まだ[1, 2]が含まれています!更新するにはどうすればよいですか?

42
Benubird

あなたは簡単にlaravelに単一のコマンドでそれをするように言うことができます:

$model->load('relation');

関係コレクションを更新するように指示し、$model->relationは正しい値を表示するようになりました。

80
Benubird

すべてのリレーションを必要に応じて強制的にリロードし、モデル内にいる場合は、次を使用できます。

$this->relations = [];
3
Sabrina Leggett

Eloquentクエリビルダーを使用することができます。

$freshCollection = $user->roles()->get();
2
James Akwuh

結論:ここにある3つのソリューション

$model->load('relation');

unset($model->relation);

$freshCollection = $user->roles()->get();`
1
kevinYang

設定を解除して、システムをオンデマンドでリロードしてください。

unset($model->relation)
0