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();
而且在这种情况下,我也得到Sites
空Agthemes
。 你能告诉我为什么吗?
编辑
我想补充的关系
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'通常运行完全独立的查询,然后结合结果(取决于关联类型)。
如果您想确保根据相关模型的条件限制结果,请使用'连接'而不是'包含'。
看到这个页面,详细了解该协会如何使用(或不使用)连接,以及如何更改连接策略......等等:
这里我的问题是,我无法显示DebugKit工具栏。看起来Debugkit工作正常,因为如果我更改文件夹名称,就会出现错误。我正在研究一个子域(test.myweb.com),我看到很多关于这个问题的文章,我想我检查了一切,在日志和萤火虫中看不到任何错误!?! – 2ndGAB
我不确定在不同版本之间的事情是,如果我们必须编写'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
没有得到DebugKit的工作肯定是一个问题,但应该是它自己的问题,包括所有的细节。 – Dave