web-dev-qa-db-ja.com

CakePHP3.xで「含む」モデルを注文する

Thingsに複数のAnotherThingがあります。現在、AnotherThing Controllerの編集アクションでそれらを注文しようとしています-編集でThingsに問題なくアクセスできます、ただし、Things.posなど、別の方法で(IDではなく)並べ替えたい

ここでのベストプラクティスは何ですか?でやってみました

public $hasMany = array(
        'Thing' => array(
            'order' => 'Thing.pos DESC'
        )
    );

しかし、何も変わりませんでした。何か案が?

10
Isengo

ドキュメントを読み直してください。ごめんなさい!

とにかく、誰かが答えを探すなら、ここにあります: http://book.cakephp.org/3.0/en/orm/retrieveing-data-and-resultsets.html#sorting-contained-associations ==

編集:

HasManyおよびBelongsToManyアソシエーションをロードする場合、sortオプションを使用して、これらのアソシエーションのデータをソートできます。

$query->contain([
    'Comments' => [
        'sort' => ['Comment.created' => 'DESC']
    ]
]);
26
Isengo

関連するテーブルでいくつかのカスタムFinderメソッドを定義している場合は、それらをcontain()内で使用できます。あなたの場合、あなたは以下のようにこれを解決することができます:

$query->contain([
        'Comments' => function ($q) {
           return $q->order(['created'=>'DESC']);
        }
    ]);
2
Faisal