save()
方法は、データベースにデータを持続するが、それはモデルにデータを更新するか、関係を再ロードについては何も行いません。
最も簡単な解決策は、save()
を呼び出した後でオブジェクトを更新することです。これは自動的に熱心なあなたがモデルにあなたの$with
プロパティで定義した関係をロードします:別のオプションは、単に手動load()
方法を使用して、関係を自分でリロードすることです
// ...
$post->save();
// refresh the post from the database
$post = $post->fresh();
。
// ...
$post->save();
// reload the desired relationships
$post->load(['user', 'answers', 'questions']);
しかし、これはあなたが自動ロード(一度、このコードでは、その後一度モデルで定義された、と)になりたいの関係を定義するコードを複製します。モデルに新しい関数を作成することでそれを緩和することができます。
// in Post model
public function reloadRelations() {
$this->load($this->with);
}
// code usage
// ...
$post->save();
// call your new function to reload the relations
$post->reloadRelations();
しかし、ちょうどfresh()
方法で構築を呼び出す上でこのルートを行くことの唯一の真のメリットは、これが元Post
データを取得するクエリを再実行しないであろうということです。
リクエストを1000秒間処理する場合は、1つのクエリで違いが生じる可能性がありますが、それ以外は心配しないで、fresh()
メソッドを使用してください。しかし、オプションはあなたが選択するためのものです。
関係が結ばれていないということを意味しますか?あなたはどのように関係にアクセスしていますか? – Devon
'print_r(User :: where(['id' => Auth :: user() - > id]) - >( 'posts')); ' –