1인(Person), 여러 자녀(Children) 등 일대다 매핑에 Doctrine을 사용하고 있습니다. Doctrine을 사용하여 Children을 자동으로 얻을 때 자녀를 연령별로 정렬할 수 있기를 바랍니다.
실례합니다: 이를 달성하려면 어떤 함수를 오버로드해야 합니까? persion->SQL 쿼리를 수행하기 위해 getChildren()이 호출하는 함수는 무엇입니까?
이렇게 필요한 결과를 찾기가 어렵습니다. 조언 부탁드립니다.
伊谢尔伦2017-05-16 16:45:51
Person
클래스의 getChildren
메소드를 수정하세요Person
类的getChildren
方法
<?php
// src/AppBundle/Entity/Person.php
// ...
use Doctrine\Common\Collections\Criteria;
//...
/**
* @param string $orderedByAge "ASC"|"DESC"
*/
public function getChildren($orderedByAge=null)
{
if (null === $orderedByAge) {
return $this->children;
}
if (!in_array(strtoupper($orderedByAge), ['ASC', 'DESC'])) {
throw new \InvalidArgumentException('参数错误,必须是"ASC"或"DESC"中的一个');
}
$order = 'ASC' === $orderedByAge ? Criteria::ASC : Criteria::DESC;
$criteria = Criteria::create()->orderBy(['age' => $order]);
return $this->children->matching($criteria);
}
// ...
如果不想修改getChildren
方法,可以写一个新的方法getChildrenOrderedByAge
,道理同上。
Doctrine
的一对多或者多对多关系中,Entity
中所谓多
的属性是DoctrineCommonCollectionsCollection
接口的某一实现的实例,默认情况下是DoctrineCommonCollectionsArrayCollection
,上述解决方案中用到的就是这一接口的Filtering API
(筛选接口),上述情况下,筛选的条件会最终转化到SQL
으아아아
getChildren
메소드를 수정하고 싶지 않다면 위와 같은 이유로 새로운 메소드 getChildrenOrderedByAge
를 작성하면 됩니다. 요약:🎜 🎜
Doctrine
의 일대다 또는 다대다 관계에서 Entity
의 소위 다
속성은 < code>DoctrineCommonCollectionsCollection 인터페이스 구현 인스턴스는 기본적으로 DoctrineCommonCollectionsArrayCollection
입니다. 이 인터페이스의 Filtering API
(필터링 인터페이스)는 위 솔루션에서 사용됩니다. 위의 경우 필터링된 조건은 결국 성능 최적화를 달성하기 위한 처리를 위해 SQL
레이어로 변환됩니다. 🎜
🎜마지막으로 관련 공식 문서 링크는 다음과 같습니다: Filtering Collections🎜我想大声告诉你2017-05-16 16:45:51
@vinzao의 방법을 사용해도 괜찮지만 Doctirne에서는 OrderBy
방법을 제공합니다.
사람:
으아아아어린이:
으아아아