首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cakephp3事务查找查询

Cakephp3事务查找查询
EN

Stack Overflow用户
提问于 2015-06-12 10:36:55
回答 1查看 482关注 0票数 0

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

我在cakephp3中有以下控制器:

代码语言:javascript
复制
<?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-日志中得到这一点:

代码语言:javascript
复制
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

但我得到的是:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-12 12:38:36

因为它对我很好,所以我怀疑在事务性回调之外还有一个额外的查询,它也查找id = 2,因为您所显示的find()调用生成的查询永远不会被执行,因为查询是被延迟计算的。

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

另见Cookbook > ...ORM > Query Builder > How Are Queries Lazily Evaluated

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30800986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档