2011-02-10 22 views
1

私はチケットテーブルと連絡先テーブルを持っています。チケットは多くの連絡先を持つことができます。ネストされたHABTMアレイの特定のフィールドを選択してください

チケットテーブルを改ページして、ネストされた配列から最初にリンクされた連絡先を含む特定のフィールドを選択するようにします。私が何を試みても、私はこのことを理解することができない(またはそれが可能であっても)。

マイコード:

$this->paginate = array(<br> 
    'conditions' => array('status_id !=' => '3'),<br> 
    'limit'=>50,<br> 
    'fields'=>array('Ticket.title', 'Ticket.ticket_number', 'Priority.name', 'Status.name', 'Contact.0.full_name') <br>    
); 

(。Contact.0.full_nameは、それが失敗の原因となっているどのように私はこの仕事をすることができますか?)

だから私は$this->Paginator->sortでこの列を使用することができます。

答えて

0

あなたcantこのようなコールコラムContact.0.full_name CakePHPはそのようには機能しません。有効なフィールド名はTableAlias.column_name

です。hasManyリレーションの子を並べ替え操作に使用することはできません。

同様の機能を実現するには、hasManyをドロップし、hasOneを追加して目的の出力を達成することができます。両方のリレーションシップタイプにスキーマの変更がないためです。

$this->Ticket->unbindModel(array('hasMany' => array('Contact'))); 
$this->Ticket->bindModel(array('hasOne' => array('Contact'))); 
$this->paginate = array(
    'conditions' => array('status_id !=' => '3'), 
    'limit'=>50, 
    'fields'=>array('Ticket.title', 'Ticket.ticket_number', 'Priority.name', 'Status.name', 'Contact.full_name') 
); 

ここでは、この列Contact.full_nameをソートの目的で使用できます。

+0

ありがとうございます。問題は、私がインデックスページから$ this-> Paginator-> sortを使用して結果を並べ替えるオプションを持つように、ページネートクエリから連絡先full_nameを取得する必要があることです。 –

+0

@ user612048あなたは、飛行中にドロップ&リレーションシップを追加する必要があります(*私はそれをテストしていません*) – Ish

+0

...あなたが何を言っているのかわからず、検索が空になっています。 –

関連する問題