我有以下(简单)代码。如果我复制/粘贴查询,它们运行得很好。
我检查过的事情:
奇怪的是,我确实返回了“更新”行的数量。
我尝试过以下格式(都不起作用):
$activatedCatIds = DB::update('UPDATE offline_mall_categories SET deleted_at=NULL WHERE id IN (SELECT category_id FROM offline_mall_category_product GROUP BY category_id)');
$deletedCatids = DB::update('UPDATE offline_mall_categories SET deleted_at=NOW() WHERE id NOT IN (SELECT category_id FROM offline_mall_category_product GROUP BY category_id) AND deleted_at IS NULL');
echo "IN TOTAL " . $activatedCatIds . " CATEGORIES WERE ACTIVATED. AND " . $deletedCatids . " WERE DELETED" . PHP_EOL;
返回更新的行数。但数据库中没有发生任何变化。
我尝试以下格式:
$existingCats = DB::connection()->getPdo()->query('SELECT category_id FROM offline_mall_category_product GROUP BY category_id')->fetchAll(\PDO::FETCH_ASSOC);
$activatedCatIds = Category::whereIn('id', $existingCats)->restore(); // restore any deleted cats.
$deletedCatids = Category::whereNotIn('id', $existingCats)->delete();
echo "IN TOTAL " . $activatedCatIds . " CATEGORIES WERE ACTIVATED. AND " . $deletedCatids . " WERE DELETED" . PHP_EOL;
同样的故事。 “已填充更改的行”,但没有发生任何更改。
我在这里遗漏了什么吗?
我认为这里有2个选择:
我设法通过运行修复它:
DB::reconnect('mysql');
在致电我询问之前。显然 Laravel 忘记了我的连接?
对这个解决方案不满意,但现在似乎已经解决了。
DB::update("更新表 t1 SET t1.column_name = (从 DBNAME.TABLE2 t2 中选择列名,其中 t1.primary_id = t2.foreign_id)");
以我的 Oracle SQL 为例。请记住 DB::beingTranstion() 需要删除。