您的位置:首页 > 编程语言 > PHP开发

YII2.0 批量插入

2018-01-31 12:22 381 查看
关键代码在try里,其他都乱七八糟的,不要看不要看

public function OrderInsert($account_id, $supplier_id, $start_date, $end_date)
{
$orders = Order::find()
-> where('is_purchase = :supplier_id and updated >= :start_date and updated < :end_date', [':supplier_id' = $supplier_id, ':start_date' = $start_date, ':end_date' = $end_date])
-> asArray() -> all(); // 查询

$data = []; // 存储需要插入数据表的数据

foreach ($orders as $k => $v) {
$order = [
'account_id' => $account_id,
'order_id' => $v['order_id'],
'order_price' => $v['order_price'],
];
array_push($data, $order);
}

$transaction = Yii::$app -> db -> beginTransaction(); // 事务处理

try {
/**********************************第一种方法**********************************/

// Yii2.0内置批量插入方法 batchInsert(表名, 字段, 数据)
// 数据的格式请看上面foreach后的$data,自个儿琢磨一下
$result = Yii::$app -> db -> createCommand() -> batchInsert(AccountDetail::tableName(),
[
'account_id',
'order_id',
'order_price',
], $data) -> execute();

if (!result) throw new \Exception();

/**********************************第二种方法**********************************/

// save()
foreach ($data as $k => $v) {

$model = new AccountDetail;

$result = $model -> load($v, '') && $model -> save();

if (!result) throw new \Exception();

}

$transaction -> commit();

} catch (\Exception $e) {
$transaction -> rollback();
return false;
}
return true;
}


给自己码上,以防以后忘记。如果对大家有帮助,那自然是极好的!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  YII2.0 INSERT