在Laravel 4中,我有一个" Meta"可以通过" object_id"与任何对象关联的模型和" object_type"属性。例如:
id: 1
object_id: 100
object_type: User
key: favorite_ice_cream
value: Vanilla
我通过morphTo()和morphMany()正常工作,如http://laravel.com/docs/eloquent#polymorphic-relations中所述,所以我可以通过以下方式拉取用户及其所有元素:
$ user = User :: with(' meta') - > find(100);
我现在要弄清楚的是:是否有一种简单的方法可以将meta保存到我的用户?如:
$user = User::find(100);
$user->meta()->save(['key' => 'hair_color', 'value' = 'black']);
在meta上正确设置object_id和object_type所需的保存是什么。由于我已经定义了模型中的关系,我不确定这是否会自动完成。我随机尝试了几种不同的方法但每次都崩溃了。
答案 0 :(得分:11)
save
上的 MorphMany
方法将相关模型作为参数,而不是数组。
它将始终正确设置外键和多态关系的模型类型。显然你需要先保存父模型。
// Meta morphTo(User)
$user = User::find($id);
$meta = new Meta([...]);
$user->meta()->save($meta);
// or multiple
$user->meta()->saveMany([new Meta([...], new Meta[...]);
另一方面, attach
是适用于belongsToMany
和mm多态关系的不同方法,而不执行相同操作,但这些关系也使用{{1} }}
save