0

私がしたこと

次のように、テーブルに一括データを挿入しています。

if(count($bulkInsertArray)>0){
    $columnNameArray=['columnName1','columnName2','columnName3'];
    // below line insert all your record and return number of rows inserted
    $insertCount = Yii::$app->db->createCommand()
                   ->batchInsert(
                         $tableName, $columnNameArray, $bulkInsertArray
                     )
                   ->execute();
}

REF: Yii 2 で複数のデータをデータベースに挿入する

そしてここで正常に動作する挿入。

私が欲しいもの:

ここで私の質問は、ここで columnName1 が秘密鍵であり、その列に null 値を渡す場合は挿入操作を実行する場合、そうでない場合は更新操作を実行する場合のようなことを行うことができるかということです。

CAKEPHP で動作する同じ概念。

YII2を使用しています。

4

2 に答える 2

0

Yii2 は「アップサート」ロジックを提供しません。
2 つの操作に分割する必要があります
。1) 重複のない挿入 (以下のクエリ)
2) 更新

--don't insert user if login already exists
insert into users(login, name)
select *
from 
(
    select
    'l_john' as login,
    'John' as name
    union 
    select
    'l_mike' as login,
    'Mike' as name
) q
left join users u
on u.login = q.login
where u.id is null

また

create temp table tmp_users(login, name);

insert into tmp_users(login, name) values
('l_john', 'John'),
('l_mike', 'Mike');

insert into users(login, name)
select tu.login, tu.name
from tmp_users ti
left join users u
on u.login = tu.login

2 番目のクエリ セットはより高速です

于 2015-04-08T13:42:13.170 に答える