【发布时间】:2014-08-29 19:00:53
【问题描述】:
在 Laravel 4 中,我有一个“元”模型,它可以通过“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);
我现在想弄清楚的是:有没有一种简单的方法可以将元数据保存给我的用户?如:
$user = User::find(100);
$user->meta()->save(['key' => 'hair_color', 'value' = 'black']);
无论保存什么,都需要在元数据上正确设置 object_id 和 object_type。由于我已经在模型中定义了关系,我不确定这是否会自动完成。我随机尝试了几种不同的方法,但每次都崩溃。
【问题讨论】:
-
MorphMany上的save方法将相关模型作为参数,而不是数组。而且“坠毁”没有任何意义,所以要准确 -
如果我创建一个元模型数组并将其传递给 saveMany(),saveMany 会自动设置 object_id 和 object_type 属性吗?还是在创建 Meta 对象时必须手动执行此操作?我希望,因为我已经定义了 Meta 和 User 之间的关系,并且它知道如何从 User 中检索 Meta,所以有一种方法可以将 Meta 放回 User 中,而无需手动设置 $meta- >object_type = 'User' 在执行 $user->meta()->save($meta) 之前。有意义吗?
-
你的意思是
$user->meta()->attach(1, ['key' => 'hair_color', 'value' => 'black'])没有达到你所需要的吗? -
当然会正确设置关系,所以不需要手动设置
_type或_id中的任何一个 -
@deczo 好的,这是有道理的。谢谢!
标签: php laravel laravel-4 eloquent