현재 두 개의 관련 테이블에서 생성 된 열을 정렬하고 그에 따라 상위 테이블을 업데이트해야하는 타임 라인 기능을 구현하려고합니다.CakePHP 3 ORM - 두 개의 다른 관련 테이블에서 두 개의 열을 기반으로 정렬
더 구체적으로 말하면 많은 설명이있는 그림 테이블이 있습니다. 주석 및 그림 테이블의 생성 된 열에서 가장 최근의 타임 스탬프를 기반으로 사진을 정렬하려고합니다.
내가 필요한 데이터를 검색하는 다음 쿼리를 가지고 있지만 제대로 정렬되지 않습니다
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 함수를 호출하려고했습니다. 나는 두 테이블을 서로 연관 시켜서 두 테이블 모두를 정렬 할 수있는 방법을 찾지 못하는 것 같습니다.
또한 유니온 선언문을 사용할 수있는 다른 출처 (like this one)를 읽었지 만 관련 옵션과 관련이없는 관련이없는 테이블에서 작동한다는 점에 대해서는 알 수 있습니다.
누구든지이 문제를 해결하는 방법에 대한 지침을 줄 수 있습니까?
내가 사용하는 플러그인 (Crud v4)의 표준 기능이 오버로드되어 그림으로 시작하는 무언가로 쿼리를 대체 할 수 있기 때문에 주석에 내 쿼리를 작성할 수 없습니다 (표준 색인 방법). 나는 가장 최근의 주석으로 정렬 된 모든 관련 사진을 그림의 첫 번째 주석으로 검색하여 지금 그것을 해결했습니다. 그 다음에 필자는 적절한 결과를 제공하는 수공 정렬 알고리즘을 사용합니다. 추악하지만 작동합니다. – markvdlaan93