【问题标题】:How do you insert related polymorphic models in Laravel 4你如何在 Laravel 4 中插入相关的多态模型
【发布时间】: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


【解决方案1】:

MorphMany 上的save 方法将相关模型作为参数,而不是数组。

它将始终正确设置多态关系的外键和模型类型。显然你需要先保存父模型。

// 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 多态关系的不同方法,它确实做同样的事情,但这些关系也使用 save

// User belongsToMany(Category)
$user = User::find($id);
$user->categories()->save(new Category([...]));

// but attach is different
$user->categories()->attach($catId); // either id

$category = Category::find($catId);
$user->categories()->attach($category); // or a Model

// this will not work
$user->categories()->attach(new Category([...]));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 2013-08-07
    • 2014-07-02
    • 1970-01-01
    相关资源
    最近更新 更多