Laravel 插入嵌套的 Eloquent ORM 模型

Posted

技术标签:

【中文标题】Laravel 插入嵌套的 Eloquent ORM 模型【英文标题】:Laravel Inserting nested Eloquent ORM model 【发布时间】:2012-12-10 07:51:59 【问题描述】:

假设我有三个具有如下关系的表:

    产品

    has many options
    

    选项

    can belong to many product
    has option_values
    

    option_value

    belongs to many option
    

使用 Laravel 我可以像这样更新选项

product->options()->insert($stuff);

但是我也想插入到 option_value 中。

我试过了

product->options()->values()->insert($otherStuff);

但这不起作用。如何使用 Eloquent ORM 做到这一点?

【问题讨论】:

【参考方案1】:

您不能以这种方式访问​​子关系,您必须实际拥有模型结果并在其上调用方法,或者使用预加载但预加载对插入没有帮助。

您必须循环选项模型并通过它们插入,但这会导致插入查询过多。最好只获取相关的 id 并在单个流畅的查询中运行插入,而不是在许多 Eloquent 中运行。

$option_ids = $product->options()->lists('id');
DB::table(OptionValue::$table)->insert(array_merge($data, $option_ids));

【讨论】:

以上是关于Laravel 插入嵌套的 Eloquent ORM 模型的主要内容,如果未能解决你的问题,请参考以下文章

Python 操作Redis

python爬虫入门----- 阿里巴巴供应商爬虫

Python词典设置默认值小技巧

《python学习手册(第4版)》pdf

Django settings.py 的media路径设置

Python中的赋值,浅拷贝和深拷贝的区别