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

如何摆脱cakephp 2.x中的空关联模型,cakephp,cakephp-2.x,Cakephp,Cakephp 2.x,我正在尝试获取Order.item.ItemType.show\u type=1的项目类型。我已经编写了查询,但我只想显示ItemType.show_type=1的项,而不是所有项 $brief = $this->Order->find('first', array( 'fields' => array( 'Order.*' ), 'conditions' => arr

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

$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

协会:

// 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');
打印:

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'
                )
            )
        )
    )
)

这不能用可数行为来实现,但我使用该方法,将递归设置为-1

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

另一个解决方案是检查结果,并取消空结果的设置

foreach($brief as $k => $v){
    foreach($v['Item'] as $kk => $vv){
        if(empty($vv['ItemType'])){
             unset($brief[$k]['Item'][$kk];
        }
    }
}
debug($brief);

你能分享你的模型和他们的联系吗
foreach($brief as $k => $v){
    foreach($v['Item'] as $kk => $vv){
        if(empty($vv['ItemType'])){
             unset($brief[$k]['Item'][$kk];
        }
    }
}
debug($brief);