FuelPHP ORM批量更新相关对象

FuelPHP ORM批量更新相关对象,orm,fuelphp,Orm,Fuelphp,我正在尝试批量更新发票上的一个包含所有相关项目的表 $_POST Existing relations intended result ===================================================== item_id: 3 unlink 3 item_id: 4 item_id: 4 update 4 item_id: 5 item_

我正在尝试批量更新发票上的一个包含所有相关项目的表

$_POST           Existing relations   intended result
=====================================================
                 item_id: 3           unlink 3
item_id: 4       item_id: 4           update 4
item_id: 5       item_id: 5           update 5
item_id: null                         create x
item_id: null                         create x
我正在推送一个json对象数组,该数组具有
$\u属性
模型所期望的所有属性

我的控制器方法如下所示:

public function update_items($invoice_id) 
{
    $invoice = Model_Invoice::find($invoice_id);

    if ($items = MyInput::json())
    {
        $invoice->from_array(array('invoice_items' => $items));
    }

    $invoice->save();
}
这会在保存相关对象(发票项)时出现PK冲突错误。 这是因为在
$invoice->invoice\u项目中更新的对象都是
is\u new()==true


我应该如何构造此代码?我不希望必须为每个传入的相关项目管理添加/编辑/删除状态。

如果是更新,请确保获取要更新的项目:


$invoice=Model_invoice::find($invoice_id,数组('related'=>array('invoice_items'));

如果我先提取,它不会删除不属于帖子的记录。这是问题的一部分,因为我想批量替换完整的数据集,但帖子和现有对象中的项目除外,它们应该得到更新。我应该添加我目前正在“手动”执行此操作-在两个数据集中循环查找匹配项,执行更新,删除不匹配的记录,然后是另一个循环以插入传入的记录。看起来这应该行得通……:)你必须在存储的内容和发布的内容之间进行区分,这是无法避免的。获取包含所有相关项目对象的发票对象,循环它们并删除/取消设置帖子中不存在的任何对象,然后循环帖子以更新/创建。