问题描述
我有以下(简单)代码。如果我复制/粘贴查询,它们运行得很好。
我检查过的东西:
奇怪的是,我确实得到了“更新”行的数量。
我尝试了以下格式(都不起作用):
$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;
同样的故事。 “已填充更改的行”,但未发生任何更改。
我在这里遗漏了什么吗?
解决方法
我认为这里有两种选择:
- 您正在检查错误的数据库 - 所以记录确实被删除了,但在其他数据库中
- 您正在使用数据库事务。因此,您更新行,但在完成事务之前会抛出一些异常,并且更改不会保留在数据库中。
我设法通过运行来修复它:
DB::reconnect('mysql');
在致电我的查询之前。显然 Laravel 的某个地方忘记了我的连接?
对这个解决方案不满意,但现在似乎已经解决了。