cakephp-3.0 - 如何在关联数据 CakePhp 3.x 中隐藏字段
问题描述
我有以下表,基本上是两个表连接。查找 Pops 的关联记录时,如何删除 _joinData 字段?
// PopsTable.php
public function initialize(array $config)
{
parent::initialize($config);
$this->setTable('pops');
$this->setDisplayField('name');
$this->setPrimaryKey('id');
$this->belongsToMany('Menus', [
'targetForeignKey' => 'menu_id',
'foreignKey' => 'pop_id',
'joinTable' => 'pop_menus',
]);
}
// MenusTable.php
public function initialize(array $config)
{
parent::initialize($config);
$this->setTable('menus');
$this->setDisplayField('name');
$this->setPrimaryKey('id');
$this->belongsTo('Categories', [
'foreignKey' => 'category_id'
]);
$this->hasMany('MenuDetails', [
'foreignKey' => 'menu_id'
]);
$this->hasMany('Orders', [
'foreignKey' => 'menu_id'
]);
$this->belongsToMany('Pops', [
'targetForeignKey' => 'pop_id',
'foreignKey' => 'menu_id',
'joinTable' => 'pop_menus',
]);
}
// In PopsController.php
public function getAll() {
$r = $this->Pops->find('all')
->contain(['Menus' => function(Query $q) {
return $q->select(['name']);
}])
->enableHydration(false)
->enableAutoFields(false)
->formatResults(function (\Cake\Collection\CollectionInterface $results) {
return $results->each(function ($row) {
foreach ($row['menus'] as $m) {
unset($m['_joinData']); // Delete here the _joinData
}
});
});
return json_encode($r,true);
}
返回数据
{
"id": 1,
"name": "umya Agropoli",
"city": "Agropoli",
"radius": 9,
"capacity": 30,
"cap": 127,
"country": "Italy",
"description": "Negozio anna 0",
"active": 1,
"book_hours_open": "1",
"book_hours_close": "1",
"menus": [
{
"name": "Base C",
"_joinData": {
"id": 1,
"pop_id": 1,
"menu_id": 2
}
}
]
}
解决方案
问题在于水合:如果在查询中禁用它, formatResults 似乎不起作用。启用水合作用将起作用。实体(Menu.php
在这种情况下)必须包含一个隐藏变量
// in Menu.php
protected $_hidden = ['password', '_joinData'];
推荐阅读
- python - 如何从字符串列表中查找未知字符?
- java - findById() 和 find 有什么区别
通过 ID()? - javascript - 如何调整 Chrome 开发工具的大小?
- python-3.x - Python 脚本直接通过命令行运行,但不通过 shell/bash 脚本运行
- r - devtools::install_github 错误“意外的部分标题'\description'”R
- c - C 信号量死锁
- matlab - matlab / xcov 函数
- database - 数据库 Xampp Apache
- vb.net - WIFI连接vb.net和Esp32 wroom 32收发
- javascript - 处理博览会中的多个复选框反应原生