2016-04-06 13 views
0

私のLaravelアプリケーションでは、次の設定で新しい親と子をどのように作成できますか?
未定義のメソッドを照らし\ Databaseへ コール\クエリー\ビルダー:私は 新しい多形関係の作成

$parent = new Parent(); 
$parent->save(); 
$child = new Child(); 
$parent->extended()->save($child); 

を試してみましたしかし、それは2161 Builder.phpラインに次のエラーに

BadMethodCallExceptionを与える

​​

::セーブ()

答えて

1

APIをhttps://laravel.com/api/5.2/とし、morphToを検索すると、MorphToオブジェクトを返すことがわかります。 https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Relations/MorphTo.html

このクラスのメソッドを調べると、このクラスにはsaveメソッドがないことがわかります。あなたはおそらく探している方法は、前記でassociate

で、以下を試してみてください。

$parent->extended()->associate($child); 

あなたのスキーマも壊れているようです。 extended_idは、主キー(increments関数で自動的に設定された)と子のIDにすることはできません。 id列がauto_incrementingで、auto_incrementingextended_idから削除する必要があります。

が、これは子供の多型ので、複数の種類が潜在的に同じid Sを持つことができている、それについてこのように考えてみてください。この場合、extended_id列が一意であるため、各親は1つの子を持つ可能性があります。 、id列を追加すること、主キーと自動インクリメント作るとちょうどunsigned not nullextended_idを設定することにより

は私のために働いて、それが適切に保存しています。

また、データベース設定についても調べてみましょう。あなたが以前に持っていたものは、セットアップした外部キ​​ーでは可能であってはならないので、SQLエラーを生成していたはずです。どこかで外部キーチェックを無視しているかもしれません。

+0

私は '$ parent->延長()と書いたものを使用 - >アソシエイト($の子);()'の代わりに '$ parent->拡張 - >($の子)を保存;' '$ parent-に続きます> save() 'を実行すると、id = 0の新しい親が生成され、子は作成されません。 –

+0

また、 '$ child-> extendedFrom() - > save($ parent)'と '$ child-> save()'を追加すると子が追加されますが、親列が自動インクリメント列であってもidは常に0です。 –

+0

'associate'は' child'を保存してはいけません。あなたが関連付けた後、 '$ child-> save()'を試してください – user3158900

関連する問題