Laravel DB::statement / DB::update 不起作用,但我确实得到了返回的“更改”行的数量

问题描述

我有以下(简单)代码。如果我复制/粘贴查询,它们运行得很好。

我检查过的东西:

奇怪的是,我确实得到了“更新”行的数量

我尝试了以下格式(都不起作用):

$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;

同样的故事。 “已填充更改的行”,但未发生任何更改。

在这里遗漏了什么吗?

解决方法

我认为这里有两种选择:

  1. 您正在检查错误的数据库 - 所以记录确实被删除了,但在其他数据库中
  2. 您正在使用数据库事务。因此,您更新行,但在完成事务之前会抛出一些异常,并且更改不会保留在数据库中。
,

我设法通过运行来修复它:

DB::reconnect('mysql');

在致电我的查询之前。显然 Laravel 的某个地方忘记了我的连接?

对这个解决方案不满意,但现在似乎已经解决了。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...