首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在cakephp 2.x中如何摆脱空关联模型

在cakephp 2.x中如何摆脱空关联模型
EN

Stack Overflow用户
提问于 2017-01-24 22:27:20
回答 1查看 144关注 0票数 0

我正在尝试获取Order.Item.ItemType.show_type = 1的项目类型。我已经编写了查询,但是我只想显示他们的ItemType.show_type = 1,而不是所有的项目。

代码语言:javascript
运行
复制
$brief = $this->Order->find('first', array(
            'fields' => array(
                'Order.*'
            ),
            'conditions' => array(
                'Order.order_id' => $orderId,
            ),
            'contain' => array(                 
                'Item' => array(
                    'fields' => array(
                        'Item.*', 'CHAR(64 + Item.num) AS letter'
                    ),
                    'conditions' => array(
                        'Item.deleted' => 0,
                    ),
                    'ItemType' => array(
                        'conditions' => array(
                            'ItemType.show_type' => 1
                        ),
                    )
                ),
            )
        ));

查询不应显示项目id = 25741

关联:

代码语言:javascript
运行
复制
// Order
public $hasMany = array(
    'BriefInstalment' => array(
        'foreignKey' => 'order_id'
    )
);

// Item Model
public $belongsTo = array(
    'Order',
    'ItemType' => array(
        'type' => 'inner'
    )
);

// ItemType Model
public $hasMany = array('Item');

打印:

代码语言:javascript
运行
复制
array(
    'Order' => array(
        'order_id' => '67817',
        'service' => '',
    ),
    'Item' => array(
        (int) 0 => array(
            'id' => '25741',
            'order_id' => '67817',
            'num' => '2',
            'item_type_id' => '8',
            'name' => '3-5 titles active',
            'deleted' => false,
            'ItemType' => array(),  // <= how to remove this empty model
            'Item' => array(
                (int) 0 => array(
                    'letter' => 'B'
                )
            )
        ),
        (int) 1 => array(
            'id' => '25742',
            'order_id' => '67817',
            'num' => '3',
            'item_type_id' => '2',
            'name' => '1,000 pro active',
            'deleted' => false,
            'ItemType' => array(
                'id' => '2',
                'name' => 'Part Instalment',
                'show_type' => true,
                'deleted' => false
            ),
            'Item' => array(
                (int) 0 => array(
                    'letter' => 'C'
                )
            )
        )
    )
)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-24 22:36:33

这不能使用Countaible行为来完成,但是如果使用joins方法,请将递归设置为-1

代码语言:javascript
运行
复制
$brief = $this->Order->find('first', array(
        'recursive' => -1,
        'fields' => array(
            'Order.*'
        ),
        'conditions' => array(
            'Order.order_id' => $orderId,
        ),
        'joins' => array(                 
            array(
                'table' => 'items',
                'alias' => 'Item',
                'type' => 'inner',
                'conditions' => array(
                    'Order.id = Item.order_id'
                )
            ),            
            array(
                'table' => 'item_types',
                'alias' => 'ItemType',
                'type' => 'inner',
                'conditions' => array(
                    'ItemType.id = Item.item_type_id'
                )
            ),
        )
    ));

您必须检查表名和外键名称是否正确。

另一种解决方案是检查您的结果,并取消空的结果

代码语言:javascript
运行
复制
foreach($brief as $k => $v){
    foreach($v['Item'] as $kk => $vv){
        if(empty($vv['ItemType'])){
             unset($brief[$k]['Item'][$kk];
        }
    }
}
debug($brief);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41830687

复制
相关文章

相似问题

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