gpt4 book ai didi

mysql - Cakephp3交易查找查询

转载 作者:行者123 更新时间:2023-11-29 22:20:15 24 4
gpt4 key购买 nike

在 cakephp3 中进行事务并在其中添加 get() 查询时,一切正常。但为什么在事务内部没有执行 find() 查询呢?

我在 cakephp3 中有以下 Controller :

<?php 
namespace App\Controller;

use Cake\Core\Configure;
use Cake\Network\Exception\NotFoundException;
use Cake\View\Exception\MissingTemplateException;

use Cake\Network\Session;
use Cake\Event\Event;

use Cake\Network\Http\Client;
use Cake\ORM\TableRegistry;
use Cake\Datasource\ConnectionManager;

class DashboardController extends AppController {
public function index(){
$conn = ConnectionManager::get('default');

$testModel = TableRegistry::get('Tests');

$select1=array();
$select2 = array();
$saved = array();
$conn->transactional(function ($connection)use(&$testModel,&$select1,&$select2,&$saved) {
$select1 = $testModel->find('all')->where(['id' => 2]); // article with id 12

$select2 = $testModel->get(1);
$select2->content = 'foo';
$saved = $testModel->save($select2);
});
}

}
?>

我希望在 SQL 日志中得到这个:

BEGIN
SELECT Tests.id AS `Tests__id`, Tests.content AS `Tests__content` FROM tests Tests WHERE id = 2
SELECT Tests.id AS `Tests__id`, Tests.content AS `Tests__content` FROM tests Tests WHERE Tests.id = 1 LIMIT 1
UPDATE tests SET content = 'foo' WHERE id = 1
COMMIT

但我得到的是:

BEGIN
SELECT Tests.id AS `Tests__id`, Tests.content AS `Tests__content` FROM tests Tests WHERE Tests.id = 1 LIMIT 1
UPDATE tests SET content = 'foo' WHERE id = 1
COMMIT
SELECT Tests.id AS `Tests__id`, Tests.content AS `Tests__content` FROM tests Tests WHERE id = 2

最佳答案

由于它对我来说工作正常,我怀疑您在事务回调之外还有一个额外的查询,它也会查找 id = 2,因为查询是由您显示的 find() 调用永远不会被执行,因为查询是惰性计算的。

现在您刚刚创建了一个查询对象,为了实际执行它,您必须调用 all()first(), toArray() 等,或对其进行迭代。

另请参阅 Cookbook > ...ORM > Query Builder > How Are Queries Lazily Evaluated

关于mysql - Cakephp3交易查找查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30800986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com