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

问题描述 投票:0回答:3

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

我检查过的事情:

  • 数据库用户拥有执行此更改的所有正确权限
  • 数据库连接正确

奇怪的是,我确实返回了“更新”行的数量。

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

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

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

我在这里遗漏了什么吗?

php mysql laravel laravel-query-builder
3个回答
0
投票

我认为这里有2个选择:

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

0
投票

我设法通过运行修复它:

DB::reconnect('mysql');

在致电我询问之前。显然 Laravel 忘记了我的连接?

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


0
投票

DB::update("更新表 t1 SET t1.column_name = (从 DBNAME.TABLE2 t2 中选择列名,其中 t1.primary_id = t2.foreign_id)");

以我的 Oracle SQL 为例。请记住 DB::beingTranstion() 需要删除。

© www.soinside.com 2019 - 2024. All rights reserved.