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

本文介绍如何在CakePHP框架中通过使用'joins'参数解决未知列错误,以及如何仅返回指定语言DealDetail的方法。通过实例代码演示了获取包含指定语言DealDetail的Deal列表,并且对于每个Deal只返回指定语言的DealDetail。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假如一个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、付费专栏及课程。

余额充值