首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何隐藏关联数据CakePhp 3.x中的字段

如何隐藏关联数据CakePhp 3.x中的字段
EN

Stack Overflow用户
提问于 2019-12-01 01:23:51
回答 1查看 36关注 0票数 0

我有下面的表,基本上是join中的两个表。在查找Pops的关联记录时,如何删除_joinData字段?

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

返回数据

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

回答 1

Stack Overflow用户

发布于 2019-12-01 01:41:45

问题出在水合作用上:如果在查询中禁用了它,formatResults似乎就不能工作了。启用水合将会起作用。实体(在本例中为Menu.php)必须包含一个隐藏变量

代码语言:javascript
复制
 // in Menu.php
 protected $_hidden = ['password', '_joinData'];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59118525

复制
相关文章

相似问题

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