mah*_*shb 5 transactions model codeigniter
如果在我要回滚已提交查询的任何表中出现任何错误时,我都需要插入2个表中。
我在控制器内部编写了查询,例如:
$this->db->trans_start();
$this->db->insert_batch('market_users_mapping', $marketData);
$this->db->insert_batch('maincategory_users_mapping', $maincategoryData);
$this->db->trans_complete();
if ($this->db->trans_status() === FALSE) {
throw error
}
Run Code Online (Sandbox Code Playgroud)
这很完美。但是我认为在控制器内部编写查询不是一个好习惯。因此,我做到了这一点,称为模型函数,并在相应的模型函数中编写了这些insert_batch查询。
$this->db->trans_start();
$this->maincategory_model->function_name()
$this->market_model->function_name();
$this->db->trans_complete();
if ($this->db->trans_status() === FALSE) {
throw error
`enter code here`
}
Run Code Online (Sandbox Code Playgroud)
但这没有按预期工作
您可以在这些示例中更改有关名称的查询位置(以防万一)。我认为您不能将事务绑定在不同的方法之间(第二个示例)。但是您可以并且应该将与数据库相关的代码设置为模型。
因此,请在模型中进行以下查询:
// controller code
$this->db->trans_start();
$this->maincategory_model->first_function($maincategoryData);
$this->market_model->second_function($marketData);
$this->db->trans_complete();
if ($this->db->trans_status() === FALSE) {
throw error
`enter code here`
}
// Maincategory_model code
public function first_function($maincategoryData)
{
return $this->db->insert_batch('maincategory_users_mapping', $maincategoryData);
}
// Market_model code
public function second_function($marketData)
{
return $this->db->insert_batch('market_users_mapping', $marketData);
}
Run Code Online (Sandbox Code Playgroud)