Laravel插入嵌套的Eloquent ORM模型

时间:2012-12-23 15:13:57

标签: php sql laravel eloquent

假设我有三个表格,其关系如下:

  1. 产品

    has many options
    
  2. 选项

    can belong to many product
    has option_values
    
  3. 请将option_value

    belongs to many option
    
  4. 使用Laravel我可以像这样更新选项

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

    但是我想插入 option_value

    我试过

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

    但那不起作用。如何用Eloquent ORM来完成?

1 个答案:

答案 0 :(得分:1)

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

您必须循环选项模型并插入它们,但这会导致插入查询过多。更好的方法是抓住相关的id并在一个流畅的查询中运行插入而不是很多Eloquent。

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