如何使用Kohana ORM向数据库中插入多个条目?
我使用的是Kohana 3.0,我的任务是在数据库中插入数据。问题是,我需要在其中插入多个条目(所以……在原始SQL中——多个查询)。我有来自如何使用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
$\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。。。它将乘以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谢谢,这真的很有帮助!:)可惜的是,没有多少像你这样的人能像现在这样帮助科哈纳(