Tôi có hai lớp học User
và Role
và tôi cần phải thực hiện một QueryBuilder
trả về truy vấn cho người dùng có vai trò ROLE_PROVIDER
. Tôi cần điều này cho một lĩnh vực hình thức thực thể trong Symfony 2. Trong định nghĩa Mẫu Class I có đoạn mã sau cho lĩnh vực được đề cập:Doctrine 2 trong Symfony 2 - Lọc một QueryBuilder bởi một hiệp hội
$builder->add('provider', 'entity', array(
'class' => 'ElCuadreAccountBundle:User',
'property' => 'username',
'query_builder' => function(UserRepository $ur) {
return $ur->getUsersByRoleQB('ROLE_PROVIDER');
},
'required' => true,
));
Và sau đó trong Tuỳ chỉnh của tôi UserRepository
tôi có chức năng sau đây, mà phải trả lại một QueryBuilder
đối tượng:
public function getUsersByRoleQB($role) {
$qb = $this->createQueryBuilder('u');
return $qb->join('u.roles','r')
->where($qb->expr()->in('r.role',$qb->expr()->literal($role)))
->orderBy('u.username', 'ASC');
}
Tất nhiên điều này không hiệu quả, nhưng tôi đã dán nó để minh họa nhu cầu của tôi.
Tôi đã xem xét xung quanh và có vẻ như Doctrine2 không hỗ trợ lọc nguyên bản theo liên kết. Trong số this page, họ nói như vậy và đề xuất sử dụng DQL
cho loại lọc này. Vấn đề của tôi là tôi đã không tìm thấy cách tạo một đối tượng QueryBuilder
từ một câu DQL
. Nếu bạn cũng có thể cung cấp cho tôi quyền truy vấn DQL
phù hợp, tôi sẽ rất biết ơn ...
Cảm ơn sự giúp đỡ của bạn!
Cảm ơn! câu hỏi thực sự hoàn chỉnh ... Một câu hỏi, nó không liên quan lắm đến câu hỏi ban đầu, nhưng ở đây tôi đi ... Tôi đã đọc nhiều lần rằng các phiên bản mới của symfony 2 và học thuyết 2 đang đến, và mọi người dường như có kiến thức về các tính năng mới, nhưng tôi mệt mỏi khi chạy 'php bin/vendor install', và nó không nâng cấp cả symfony hay doctrine ... làm thế nào tôi có thể nâng cấp? hoặc khi nào những phiên bản mới đó sẽ chính thức? cảm ơn câu trả lời của bạn!!! – Throoze
Bạn có thể đọc thêm về D2.2 tại đây: http://www.doctrine-project.org/. S2 sẽ không có tích hợp D2.2 cho đến khi S2.1 được phát hành, có lẽ vào mùa hè này. Tuy nhiên, bạn có thể cài đặt trực tiếp D2.2, điều chỉnh đường dẫn của bạn trong autoload.php và, đối với hầu hết các phần, mã học thuyết của bạn sẽ hoạt động. Kiểm tra tài liệu để biết những điều cần chú ý. – Cerad
Cảm ơn câu trả lời của bạn! – Throoze