如何在Laravel 4中插入相关的多态模型

时间:2014-07-08 21:42:27

标签: php laravel laravel-4 eloquent

在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所需的保存是什么。由于我已经定义了模型中的关系,我不确定这是否会自动完成。我随机尝试了几种不同的方法但每次都崩溃了。

1 个答案:

答案 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