CakePHP3:无法获取匹配的正常工作

问题描述:

如果我写了下面的查询:CakePHP3:无法获取匹配的正常工作

$sites = $this->Sites->find() 
->contain(['Agthemes']) 
->matching('Agthemes', function ($q) { 
    return $q->where([ 
     'Agthemes.site_id IS NOT' => null 
    ]); 
}) 
->all(); 

我只得到Sites已经存在Agthemes

现在我写一个类似的查询,但有一个附加的关联级别:

$users = $this->Users->find('all') 
->contain([ 
    'Sites.Agthemes' 
]) 
->matching('Sites.Agthemes', function ($q) { 
    return $q->where([ 
     'Agthemes.site_id IS NOT' => null 
    ]); 
}) 
->distinct(['Users.id']) 
->limit(5) 
->all(); 

而且在这种情况下,我也得到SitesAgthemes。 你能告诉我为什么吗?

编辑

我想补充的关系

SitesTable

$this->hasMany('Agthemes', [ 
     'dependent' => true, 
     'cascadeCallbacks' => true, 
    ]); 

    $this->belongsToMany('Users', [ 
     'joinTable' => 'sites_users', 
    ]); 

UsersTable

$this->belongsToMany('Sites', [ 
     'targetForeignKey' => 'site_id', 
     'joinTable' => 'sites_users', 
    ]); 

AgthemesTable

$this->belongsTo('Sites'); 

在DebugKit中,查看正在运行的查询。使用'contains'通常运行完全独立的查询,然后结合结果(取决于关联类型)。

如果您想确保根据相关模型的条件限制结果,请使用'连接'而不是'包含'。

看到这个页面,详细了解该协会如何使用(或不使用)连接,以及如何更改连接策略......等等:

https://book.cakephp.org/3.0/en/orm/associations.html

+0

这里我的问题是,我无法显示DebugKit工具栏。看起来Debugkit工作正常,因为如果我更改文件夹名称,就会出现错误。我正在研究一个子域(test.myweb.com),我看到很多关于这个问题的文章,我想我检查了一切,在日志和萤火虫中看不到任何错误!?! – 2ndGAB

+0

我不确定在不同版本之间的事情是,如果我们必须编写'public $ components = ['DebugKit.Toolbar'];'如你所说[这里](http://stackoverflow.com/questions/15124398/how-to-install-debugkit-on-cakephp),但我认为这是cakePHP2相关的,我没有看到这样的事情[这里](https://github.com/cakephp/app/blob/master/src/Controller /AppController.php) – 2ndGAB

+0

没有得到DebugKit的工作肯定是一个问题,但应该是它自己的问题,包括所有的细节。 – Dave