Php 尝试创建要选择的laravel查询,如果记录不存在则插入,如果另一个表中存在则更新
我有一个Postgres查询,我可以用laravel语法为“选择然后插入记录”创建查询。 无法在laravel查询中应用“如果存在,更新记录”Php 尝试创建要选择的laravel查询,如果记录不存在则插入,如果另一个表中存在则更新,php,postgresql,laravel-5,eloquent,lumen,Php,Postgresql,Laravel 5,Eloquent,Lumen,我有一个Postgres查询,我可以用laravel语法为“选择然后插入记录”创建查询。 无法在laravel查询中应用“如果存在,更新记录” postgre查询 INSERT INTO product_details (id, name, hash_id ) SELECT prod.id, d.name, MD5(CONCAT(d.name, LOWER(prod.id))) FROM tmpTable tmp INNER JOIN detailsTab
postgre查询
INSERT INTO product_details (id, name, hash_id )
SELECT prod.id, d.name, MD5(CONCAT(d.name, LOWER(prod.id)))
FROM tmpTable tmp
INNER JOIN detailsTable d USING(name)
INNER JOIN productsTable prod ON (prod.id = tmp.id)
ON CONFLICT ON CONSTRAINT product_details_pkey1
DO UPDATE SET name = EXCLUDED.name;
$query = DB::table('tmpTable AS tmp')
->join('detailsTable AS d', 'tmp.name','=', 'd.name')
->join('productsTable AS prod', 'prod.id','=','tmp.id')
->select('prod.id', 'd.name','MD5(CONCAT(d.name, LOWER(prod.id)))');
DB::table('product_details')->insertUsing(['id', 'name', 'hash_id'], $query);
Laravel查询
INSERT INTO product_details (id, name, hash_id )
SELECT prod.id, d.name, MD5(CONCAT(d.name, LOWER(prod.id)))
FROM tmpTable tmp
INNER JOIN detailsTable d USING(name)
INNER JOIN productsTable prod ON (prod.id = tmp.id)
ON CONFLICT ON CONSTRAINT product_details_pkey1
DO UPDATE SET name = EXCLUDED.name;
$query = DB::table('tmpTable AS tmp')
->join('detailsTable AS d', 'tmp.name','=', 'd.name')
->join('productsTable AS prod', 'prod.id','=','tmp.id')
->select('prod.id', 'd.name','MD5(CONCAT(d.name, LOWER(prod.id)))');
DB::table('product_details')->insertUsing(['id', 'name', 'hash_id'], $query);
您可以使用laravel提供的“updateOrCreate”方法我尝试使用以下方法“updateOrCreate”、“insertOnDuplicateKey”、“InsertOrUpdate”DB::table('product_details')->updateOrCreate(['id','name','hash_id'],$query);但调用未定义的方法illumb\Database\Query\Builder::UpdateOrCreate()调用未定义的方法illumb\Database\Query\Builder::InsertOrUpdate()调用未定义的方法illumb\Database\Query\Builder::insertOnDuplicateKey()时出错