クライアント データを表示するページング付きのグリッドがあります。を含むテーブルがあり、その中に、各行の電話番号を持つテーブルClient
とname
、各クライアントの住所を持つテーブルがあるとします。したがって、それぞれにHAS MANYと HAS MANY があります。lastName
address
Phone_Number
Client
Adress
Client
Phone_Number
Adress
ポイントは、グリッドのストア読み取りに制限を設定しようとしているということです。それでは、制限 = 2 を設定するとします。グリッドには、1 ページ (2 クライアント) あたり 2 行のみが表示されます。問題は、たとえば、client1 に 2 つの電話番号がある場合、クエリによって 2 つの行が表示され、グリッドに 1 つのクライアントのみが表示されることです。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 を使用して作成されたモデルと関係