cakephp - 未使用 find() 选项连接的表
问题描述
我正在尝试在控制器中加入以下两个表:
artifacts_publications
----------------------
id
artifact_id
publication_id
和
authors_publications
--------------------
id
author_id
publication_id
其他具有像 belongsTo 和 HasMany 等关联的表可以使用contain()
. 对于这些表,假设尚未定义关联。最后,我想将另一个表加入这些表的连接,但现在我无法让这两个加入。
控制器使用
namespace App\Controller;
use App\Controller\AppController;
use Cake\ORM\TableRegistry;
use Cake\Datasource\ConnectionManager;
在index()
控制器的动作中,我有
$options['joins'] = [
[
'table' => 'authors_publications',
'alias' => 'j',
'type' => 'LEFT OUTER',
'conditions' => [
'authors_publications.publication_id = artifacts_publications.publication_id',
],
],
];
$query = TableRegistry::getTableLocator()->get('artifacts_publications')->find('all', $options);
$query->limit(2);
debug($query);
debug($query->toArray());
生成的 SQL 查询有点像这样,但我缩短了长标识符:
SELECT id, artifact_id, publication_id
FROM artifacts_publications
LIMIT 2;
执行该查询也显示没有连接。我尝试关注cakePHP 表加入两个表的问题,但我仍然无法加入。手写 SQL 有效,但并不优雅。我在这里想念什么?
解决方案
@Utsav
尝试Containable
通过将 'join' 切换为 'contain' 来使用 CakePHP 的行为。
$options = [
'fields' => [
'ArtifactsPublication.fieldsYouWant'
],
'conditions' => [
'ArtifactsPublication.id' => $artifactId
],
'contain' => [
'AuthorsPublication'
]
];
您还可以设置递归来定义是否要获取包含模型的链接模型。或者,您可以在fields
选项中指定您希望从artifacts_publications
模型中获得哪些字段,然后只contain
指定authors_publications
模型。
希望这会有所帮助,因为我在 CakePHP 中手动加入的经验很糟糕,CakePHP 标准也是使用contain
. 请注意,contain
无法检索远程连接数据。
队友的欢呼声 :)
推荐阅读
- encoding - 如何使 Cloudinary 链接以 UTF-8 格式显示原始内容?
- python - 使用按钮将 Tkinter 文本发送到另一个函数
- mysql - MYSQL JSON 按值排序
- java - Spring休眠配置之谜
- java - encodeBase64 和 decodeBase64 不可见
- r - 如何在网格中按颜色缩放点值 - RStudio
- angular - 在后端(Python FastAPI)、前端(Angular)框架中使用 HTTPS
- node.js - 在 VSCode 扩展中,如何使用 cmd.exe 打开终端?
- python-3.x - 使用硒单击 Instagram 页面中的项目时遇到问题
- angular - 在模式而不是新窗口中显示 CKEDITOR 预览