我有一个显示客户端数据的分页网格。假设我有一个表Client
,其中有一个表name
,其中的每一行都有电话号码,还有一个表,其中有每个客户的地址。所以每个都有很多s 和有很多es。lastName
address
Phone_Number
Client
Adress
Client
Phone_Number
Adress
关键是我正在尝试对网格的存储读取设置限制。因此,假设我设置了 limit = 2。网格每页应仅显示 2 行(2 个客户端)。问题是,例如,如果 client1 有两个电话号码,查询将带来两行,使网格只显示一个客户端。我知道together=>false
查询中的设置将解决这个问题。但是每当我设置together=>false
.
这是我正在使用的代码....
Client::model()->with(
'clientPhoneNumbers',
'clientPhoneNumbers'.'PhoneNumber',
'clientAddresses',
'clientAddresses'.'Address'
)->findAll(array(condition=>(('Address.s_street_name LIKE :queryString') OR ('PhoneNumber.n_number LIKE :queryString')), params=>$params, order=>$order, limit=>$limit,together=>false));
如果我这样做,我会收到如下错误:Column not found: Address.s_street_name
. 但是,如果我设置together=>true
,它就“很好”。
我通过这样的查询找到了解决这个问题的方法......
$with = array(
'clientPhoneNumbers',
'clientPhoneNumbers'.'PhoneNumber'=>array(condition=>('PhoneNumber.n_number LIKE :queryString'), params=>array(':queryString'=>$queryString)),
'clientAddresses',
'clientAddresses'.'Address'=>array(condition=>('Address.s_street_name LIKE :queryString'), params=>array(':queryString'=>$queryString))
);
Client::model()->findAll(array(with=>$with, order=>$order, limit=>$limit,together=>false));
问题是,如果我这样做,条件是这样的
(('Address.s_street_name LIKE :queryString') AND ('PhoneNumber.n_number LIKE :queryString'))
我需要它是这样的
(('Address.s_street_name LIKE :queryString') OR ('PhoneNumber.n_number LIKE :queryString')).
有任何想法吗 ?
请记住,关系和表的名称不是实际名称。使用 Gii 创建的模型和关系