이 question의 mysql 쿼리가 있습니다. 해당 DBIx :: Class 구문?
SELECT a.*
FROM products a
INNER JOIN product_tags b ON a.product_id = b.product_id
WHERE b.tag_id IN (1,23,54)
GROUP BY a.product_id
HAVING COUNT(1) = 3
나는이
DBIx::Class 구문으로 전환 얻는 방법을 내려고 노력하고 있어요?
(DBIx docs에서 가져온 것입니다.) 이것이 조인에 관한 내용입니다. 그러나이를 통합하는 방법을 모르겠습니다.
정의 조인 관계 DBIx :: 클래스^
개의 테이블 간의 관계를 각각 제 테이블의 ResultSource에서 정의 될 필요가있다. 관계를 양방향으로 액세스해야하는 경우 (즉, CD의 모든 트랙을 가져오고 트랙의 CD 데이터를 가져 오는 경우), 두 테이블 모두에 대해 관계를 정의해야합니다. 복구 CD를 들어
이/MYSCHEMA :: CD에 쓰기를 의미, 예를 트랙 :MySchema::CD->has_many('tracks', 'MySchema::Tracks');
그리고 MYSCHEMA :: 트랙에서 : 관계의 여러 가지 다른 종류가
MySchema::Tracks->belongs_to('cd', 'MySchema::CD', 'CDID');
있습니다, DBIx :: Class :: Relationship에서보다 포괄적으로 설명됩니다. 조인 사용^
모든 관계를 정의한 후에는 실제 조인에서 사용하면 매우 간단합니다. 예를 들어 선택한 관계 유형입니다. has_many는 이미 수행 할 조인의 종류를 나타냅니다. has_many는 예를 들어 LEFT JOIN을 생성합니다. 오른쪽에 일치하는 행 (조인중인 테이블)이 있는지 여부에 관계없이 왼쪽의 모든 행을 페치합니다. 관계에 다른 유형의 조인을 강요 할 수 있습니다 (DBIx :: Class :: Relationship 문서 참조).
검색 또는 찾기 작업 중 하나를 수행 할 때,이처럼이 속성을 결합하여,도에 따라 결과를 구체화 할 관계 지정할 수 있습니다
$schema->resultset('CD')->search(
{ 'Title' => 'Funky CD',
'tracks.Name' => { like => 'T%' }
},
{ join => 'tracks',
order_by => ['tracks.id'],
}
);
당신의 대부분을 인식하지 않는 경우 이 구문을 사용하면 DBIx :: Class :: ResultSet의 "search"와 DBIx :: Class :: ResultSet의 "ATTRIBUTES"를 읽어야하지만 다음은 빠르다고 생각합니다.
검색의 첫 번째 인수는 a입니다. WHERE 속성의 hashref,이 경우에는 CD 테이블의 Title 열에 대한 제한 및 Tracks 테이블에있는 트랙의 이름에 대한 제한 인 bu 선택한 CD에 실제로 관련된 트랙에만 해당됩니다. 두 번째 인수는 검색에 대한 속성의 hashref이며, 결과는 관련 트랙의 id로 정렬되어 반환됩니다.
안녕하세요 abra 어떤 의견이 있습니까? DBIx에서 일해 보셨습니까? DBIx에 대해 알고 있습니까? 친구 중 누구라도 DBIx를 알고 있습니까? pl은 그들에게이 질문을 보여줍니다. – rajeev
DBIx는 DBIx :: Class가 하나의 모듈 인 전체 네임 스페이스입니다. DBIx :: Class의 약어는 DBIC입니다. –