CakePHP: 复杂关联查询时出现Unknown Column错误

假如一个Deal包含多个语言版本的DealDetails

现在想在分页中获取

1)仅仅包含指定语言DealDetail的Deal列表

2)而且对于每个Deal仅仅返回指定语言的DealDetail


对于1如果只是使用如下的语句:

            $this->paginate['Deal']['conditions']['DealDetail.lang_id'] = $this->data['lang_id'];

将会出现Unknown Column DealDetail.lang_id错误,即使你已经在Model中定义了Deal hasMany DealDetails, DealDetail belongsTo Deal

解决方法是使用'joins'参数


对于2,使用'containable'行为。

示范代码如下:


    var $paginate = array(
        'Deal' => array(
                    'limit'      => self::PAGE_LIMIT,
                    'order' => array(
                        'Deal.created' => 'DESC',
                        'Deal.id'      => 'DESC',
                    ),
                    'joins' => array(
                            array('table' => 't_deal_details',
                                'alias' => 'DealDetail',
                                'type' => 'LEFT',
                                'conditions' => array(
                                    'DealDetail.deal_id = Deal.id',
                                )
                            )
                    ),
                    'conditions' => array(
                        'DealDetail.lang_id' => 2,
                    ),
                    'contain' => array(
                        'DealDetail' => array(
                            'conditions' => array(
                                'DealDetail.lang_id' => 2,
                            )

                        ),

        )

更多细节阅读

http://book.cakephp.org/view/1039/Associations-Linking-Models-Together


regards,

iefreer


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值