現在、私は2つの関連テーブルで作成した列をソートし、それに応じて親テーブルを更新する必要があるタイムライン機能を実装しようとしています。CakePHP 3 ORM - 2つの異なる関連テーブルの2つの列に基づいた並べ替え
具体的には、私は多くのコメントを持つ写真の表を持っています。私はコメントと画像の両方のテーブルの作成された列の最新のタイムスタンプに基づいて画像を並べ替える必要があります。
は、私は必要なデータを取得する次のクエリを持っているが、それは正しく注文されていません。
public function getPicturesAndCommentsOfUser($userId){
return $this->find()
->contain([
'Comments' => function ($q){
return $q
->contain(['Users' => function ($q) {
return $q->select($this->select);
}])
->order(['Comments.created' => 'ASC']);
},
'Users' => function ($q) {
return $q->select($this->select);
},
'Albums'
])
->matching('Albums.Users', function ($q) use ($userId) {
return $q
->where(['Users.id' => $userId]);
});
}
私の質問はPictures.createdとComments.createdの順序の両方を組み合わせる方法です。私はすでに - > contains(['Comments'])と最後に一致した呼び出しの後のチェーンの最も外側の部分の両方でorder関数を呼び出そうとしました。私は2つのテーブルを互いに関連付ける方法を理解できないので、両方のテーブルを並べ替えることはできません。
さらに、他の情報源(like this one)で私はユニオンステートメントを使用することができますが、私がそのオプションについて知ることができるすべての情報は、関連していない無関係なテーブルでも機能するということです。
誰も私にこれを解決する方法のいくつかの指示を与えることができますか?
私が使用しているプラグイン(Crud v4)の標準機能のオーバーロードは、私がピクチャで始まる何かでクエリを置き換えることしかできないので、私のコメントはコメントにはできません(私は標準のインデックスメソッド)。最近のコメントでソートされた関連するすべての画像を画像の最初のコメントとして取り出すことで、今解決しました。その後、手作りソートアルゴリズムを使用して、適切な結果を得ます。醜いですが、それは動作します。 – markvdlaan93