2

この質問は文字通りStackOverflow全体にあることを認識していますが、どの回答もうまくいかないようです。

私の問題は簡単です。都市名順に会社をリストしたいだけです:

class Company extends AppModel
 public $recursive = 2;

 public $belongsTo = array(
 'City' => array(
  'className'    => 'City',
   'foreignKey'   => 'city_id'
  )
 );

class City extends AppModel {
 public $useTable = 'cities';

 public $belongsTo = 'Country';
 public $hasMany = array(
  'Company' => array(
    'className'    => 'Company',
    'foreignKey'   => 'city_id'
 )
);

会社のページで、つまり会社コントローラー内から、次のようなことをしたいと思います。

$this->paginate = array(
 'order' => array('Company.City.name' => 'ASC' ),
 // or is it 'order' => array('Company->City.name' => 'ASC' ), ??
);
$companies = $this->paginate('Company');

ビューには、順序を都市名順に変更するためのリンクがあります。

<?php echo $this->Html->link(__('Sort by City name'), array('controller' => 'companies', 'action' => 'index', '?' => array('sort' => 'Company.City.name'))); ?> 

会社モデル内のフィールド (会社の名前など) によって順序付けを変更するリンクを作成する場合、次のようにリンクを作成します。

<?php echo $this->Html->link(__('Sort by Company name'), array('controller' => 'companies', 'action' => 'index', '?' => array('sort' => 'Company.name'))); ?> 

...うまくいきます。また、最初、次、数字などのすべてのページネーション リンクも機能し、次のようなリンクを作成します。

localhost/companys/20/sort:Company.name/page:2

では、どうすれば Company.City.name に対してこれを行うことができますか (そして、私がそうしている間、Company.City.Country.name!) 現在、私の「並べ替え」パラメーターを無視しているようです。デバッグをオンにすると、Company.City.name で注文しようとすると、生成された SQL クエリに「order by」句がありません。

これは私を夢中にさせており、それができるのは十分に簡単なことのようです。大変助かりました!

更新:ちょっと!それはうまくいきました!または、少なくとも、私はそこまでの道のりです!コントローラーであなたの提案を使用できました:

$this->paginate = array(
  'limit' => 10,
  'order' => array('City.name' => 'ASC' )
);

そしてそれはうまくいきます!今、国に対して同じことをしようとしていますが、うまくいきません。私はもう試した:

$this->paginate = array(
      'limit' => 10,
      'order' => array('City.Country.name' => 'ASC' )
    );

$this->paginate = array(
      'limit' => 10,
      'order' => array('City->Country.name' => 'ASC' )
    );

そして、愛はありません。私の「注文」パラメータは無視されます。どうすればこれを行うことができるかについてのアイデアはありますか?

有益な回答をありがとうございました。

4

1 に答える 1

3

モデルアソシエーションシップを定義した場合は、Company.City.nameなどを使用する必要はありません。City.nameを直接使用できます。

また、リストを表示している場合は、テーブルデータを並べ替えるリンクを指定する代わりに、次のコードを使用できます。

<?php echo $this->Paginator->sort('City.name', 'City Name');?>

それがうまくいかなかったかどうか尋ねてください。

于 2012-07-16T08:21:00.840 に答える