2016-10-13 14 views
0

言うことを保存せずにモデルの関係私は2つのモデルがあります: ユーザーとタスクを雄弁:DB

次のように彼らの関係は次のとおりです。 ユーザーは多くのタスク(belongsToMany) タスクは、多くのユーザー(belongsToMany)を持つことができます

を持つことができます
$user = new User(); 
$task = new Task(); 

通常、私はこのような何かしたい: $user->tasks->attach($task)

をしかし、問題は、ユーザーであるとタスクが持続ではありませんデータベースに格納されます。したがって、上記の最後のコードを実行すると、これらのモデルにidがないため、整合性制約が発生します。

私は文書を調べましたが、そこにはメソッドassociate()がありますが、これにはid(データベースに保存されている)のいずれかのモデルが必要です。

データベースに保存されていないモデルを別のモデルに接続する方法はありますか?

答えて

1

Laravelのモデルは、通常のクラスに過ぎません。インスタンス化するだけでDBに残ることはありません。あなたがモデルを保存することにより、DBに固執する必要があります

をこれは以下のようにsave()を実行することによって行うことができます。

$user->save(); 
$task->save(); 

$user->tasks()->attach($task->id); 

それは、うんそれそれの$user->tasks()->attach()なく$user->tasks->attach()

+0

に注意することが重要ですが、私はドン –

+0

AR実装を使用していて、DBに保存したくないのですか?それでは、ここで何を達成しようとしていますか? –

+0

技術的には、コレクションが必要です。だから、単に配列を作成して、それを簡単にコレクションに変換することができます。しかし、私はクラスをヒントして 'その'モデルのインスタンスのみを受け入れるようにしましたので、実行時の例外は発生しませんでした...そして、それはスマートだと思っていました... –