如何使用Kohana ORM向数据库中插入多个条目?

如何使用Kohana ORM向数据库中插入多个条目?,orm,insert,save,kohana,kohana-orm,Orm,Insert,Save,Kohana,Kohana Orm,我使用的是Kohana 3.0,我的任务是在数据库中插入数据。问题是,我需要在其中插入多个条目(所以……在原始SQL中——多个查询)。我有来自$\u POST的项目id、金额和融资人(这是一个数组)字段 在控制器中,我有如下内容: $model_for_financiers->values($_POST); $model_for_financiers->save_many(); 我已经在我的ORM模型中创建了名为save_many()的方法 public function sav

我使用的是Kohana 3.0,我的任务是在数据库中插入数据。问题是,我需要在其中插入多个条目(所以……在原始SQL中——多个查询)。我有来自
$\u POST
项目id
金额
融资人
(这是一个数组)字段

在控制器中,我有如下内容:

$model_for_financiers->values($_POST);

$model_for_financiers->save_many();
我已经在我的ORM模型中创建了名为
save_many()
的方法

public function save_many() {

    foreach ($this->financiers as $financier_id) {

        $this->created_at = time();
        $this->amount     = $this->amount * 100;

        $this->financier_id = $financier_id;

        $this->save();

        $this->reset();

    }

}
…并将
金融家
添加为忽略列

在我的代码中有两种不需要的行为(或者我应该如何称呼它们?):

  • 数据库中只插入最后一个条目(不管融资人中有多少ID)

  • 金额
    乘以
    金融家
    中ID的次数。例如,如果该数组中有两个ID。。。它将乘以100'00(最后两个零是不需要的)

  • 你们能帮我吗,伙计们?谢谢你的建议

    编辑:

    我的第二个想法来了。简而言之,在控制器中循环,并在每次循环中创建对象的新实例

    控制器:

    foreach ($_POST['financiers'] as $financier_id) {
    
        $model_for_financiers = ORM::factory('Vcn_Project_Financier');
    
        $model_for_financiers->values(array(
            'amount'       => $_POST['amount'],
            'project_id'   => $project_id,
            'financier_id' => $financier_id
        ));
    
        if ($model_for_financiers->check()) {
    
            $model_for_financiers->save();
    
        }
    
    }
    
    $model_for_financiers = ORM::factory('Vcn_Project_Financier');
    
    $model_for_financiers->save_many($_POST['amount'], $_POST['financiers'], $project_id);
    
    型号:

    public function save() {
    
        $this->created_at = time();
        $this->amount     = $this->amount * 100;
    
    //      $this->reset();
    
        parent::save();
    
    }
    
    public function save_many($amount, $financiers, $project_id) {
    
        foreach ($financiers as $financier_id) {
    
            $this->values(array(
                'amount'       => $amount,
                'financier_id' => $financier_id,
                'project_id'   => $project_id
            ));
    
            if ($this->check()) {
    
                $this->created_at = time();
                $this->amount     = $amount * 100;
    
                $this->save();
    
            }
    
            $this->reset();
    
        }
    
    }
    
    我真的不知道f*ck是什么,但是,在模型的
    save()
    中,当我尝试
    var\u dump()
    传递给
    values()
    的任何变量时,它会说
    NULL
    。好消息是它现在在数据库中插入了正确的条目计数。坏消息是:传递给
    values()
    的任何数据都是空的

    非常感谢您的帮助。:)

    编辑#2:

    不起作用的第三种解决方案:(

    控制器:

    foreach ($_POST['financiers'] as $financier_id) {
    
        $model_for_financiers = ORM::factory('Vcn_Project_Financier');
    
        $model_for_financiers->values(array(
            'amount'       => $_POST['amount'],
            'project_id'   => $project_id,
            'financier_id' => $financier_id
        ));
    
        if ($model_for_financiers->check()) {
    
            $model_for_financiers->save();
    
        }
    
    }
    
    $model_for_financiers = ORM::factory('Vcn_Project_Financier');
    
    $model_for_financiers->save_many($_POST['amount'], $_POST['financiers'], $project_id);
    
    型号:

    public function save() {
    
        $this->created_at = time();
        $this->amount     = $this->amount * 100;
    
    //      $this->reset();
    
        parent::save();
    
    }
    
    public function save_many($amount, $financiers, $project_id) {
    
        foreach ($financiers as $financier_id) {
    
            $this->values(array(
                'amount'       => $amount,
                'financier_id' => $financier_id,
                'project_id'   => $project_id
            ));
    
            if ($this->check()) {
    
                $this->created_at = time();
                $this->amount     = $amount * 100;
    
                $this->save();
    
            }
    
            $this->reset();
    
        }
    
    }
    
    它只插入一个条目,并忽略传递给
    values()
    的所有条目,如解决方案2中所示


    发生了什么?

    一个模型只代表一行数据,整个ORM是围绕这个概念构建的。如果你想保存多个结果,你必须在你使用的方法中实例化每个新对象,而不是使用$this(由于您使用的是
    save()

    因此:

    您应该尝试严格使用
    ORM::create()
    ORM::update()
    而不是save(如果您以前这样做过,您可能会立即调试它:)


    编辑:哦,很抱歉,我忽略了您正在使用Kohana 3.0的事实,因此没有
    update()
    create()
    separation:)

    我找到了一种方法,可以通过调用ORM类中的一个方法来添加多个条目。控制器中没有循环或其他…:)

    另外,也许这不是正确的方法,ORM不是为这样的东西设计的,但我需要这样做。就这么做吧D

    谢谢,这真的很有帮助!:)可惜的是,没有多少像你这样的人能像现在这样帮助科哈纳(