Có thể sử dụng chỉ mục bằng trình tạo truy vấn của học thuyết 2 không và nếu cú pháp thích hợp là gì?Trình tạo và chỉ mục truy vấn của Doctrine 2 theo số
Trả lời
Dưới đây là một giải pháp khi sử dụng querybuilder, sử dụng phun thủ công của chỉ số quy định tại khoản -
(do you querybuilder statement)
$q = $q->getQuery()->setDQL(str_replace('WHERE', 'INDEX BY yourIndexValue WHERE', $q->getDQL()));
Điều này dường như làm việc cho tôi ...
Có thể, bằng cách sử dụng trình tạo truy vấn. Một ví dụ nhỏ, giả sử chúng ta muốn index bằng t.someField. Xem đối số thứ ba trong phương thức.
<?php
$query = $em->createQueryBuilder()
->select('t.somefield', 't.someOtherField')
->setFrom('Entity\Table', 't', 't.someField')
->getQuery()
$results = $query->getArrayResult();
//your result will look something like:
$results['somefieldvalue'] = array(array('somefield' => 'value', 'someOtherField' => 'test'));
?>
Điều này sẽ hoạt động trong Doctrine 2.1 ít nhất. Trong Doctrine 2.0, nó chưa được hỗ trợ. Trong Doctrine 2.0, nó chỉ được hỗ trợ khi bạn chỉ định nó với DQL.
Với Doctrine 2.1.0-DEV, tôi sử dụng '$ qb-> add ('from', 'Entity \ Table t INDEX BY t.id');' – Maxence
Đối với một bản cập nhật. Bạn có thể làm một cái gì đó như thế này.
$qb = $entityManager->createQueryBuilder();
$qb->from($repository->getClassName(), 'a', 'a.id');
$qb->select(a);
$result = new ArrayCollection($qb->getQuery()->getResult());
Kết quả là, tập hợp mảng sẽ chứa các phần tử được lập chỉ mục phù hợp.
Bắt đầu với 2.2, giờ đây bạn có thể bao gồm INDEX BY trong báo cáo từ của mình. Nếu bạn đang thêm một từ khoản,
$qb->from($class, $alias, $indexBy);
Nếu bạn đã có một từ khoản mà bạn muốn thay thế, sau đó bạn có thể thay thế nó bằng:
$qb->add('from', new Expr\From($class, $alias, $indexBy), false);
Có một yêu cầu kéo mở để thêm nó với hàm createQueryBuilder của Repository, vì vậy hy vọng điều này sẽ sớm được bổ sung.
Đây phải là câu trả lời đúng. – imclickingmaniac
Xin chào, tôi đang viết từ năm 2015 và chưa có :-( – zerkms
Nó đã bị từ chối ... https://github.com/doctrine/doctrine2/pull/592 – cmenning
Bạn cũng có thể sử dụng INDEX BY mặc định của khóa ngoại, ví dụ: "yourIndexValue_id" trực tiếp trong ánh xạ của bạn:
/**
* @ORM\OneToMany(targetEntity="Bar", mappedBy="foo", indexBy="bar_id")
*/
protected $bars;
Thật không may là dường như không được ghi chép rằng bạn phải sử dụng tên cột của chính khóa ngoại.
Cú pháp thích hợp và đơn giản nhất sẽ là:
$enityManager->getRepository('AppBundle:Entity')->createQueryBuilder('entity', 'entity.name')->getQuery()->getResult();
này sẽ chỉ số kết quả bởi Entity trường tên.
- 1. Regex với trình tạo truy vấn Doctrine 2?
- 2. Truy vấn nhiều người trong Doctrine 2
- 3. học thuyết 2 - truy vấn có điều kiện của trình tạo truy vấn ... Nếu phát biểu?
- 4. Cập nhật chỉ mục Solr theo truy vấn
- 5. Doctrine 2 subquery
- 6. Ngăn chặn bộ nhớ truy vấn của Doctrine trong Symfony
- 7. Học thuyết 2 xóa với trình tạo truy vấn
- 8. Tạo giá trị chuỗi tiếp theo theo cách thủ công trong Doctrine 2
- 9. Symfony 2 + Doctrine 2 + inheritance
- 10. Doctrine 2 limit IN subquery
- 11. Truy vấn với EXISTS cho Doctrine Symfony2
- 12. MySQL. Tạo chỉ mục cho các truy vấn "OR"
- 13. Doctrine2 Trình tạo truy vấn bitwise và
- 14. Nhận số mục với trình tạo truy vấn trình điều khiển MongoDB C#
- 15. Tạo chỉ mục cho nhóm theo trường?
- 16. Doctrine 2 Value Objects
- 17. Tại sao Trình tối ưu hóa truy vấn MySQL chọn chỉ mục phụ trên chỉ mục chính được nhóm?
- 18. Truy vấn SQL để tìm số Kevin Bacon số 2
- 19. Doctrine 2 chú thích và "var"
- 20. Chỉ mục MySQL làm chậm truy vấn
- 21. Symfony2 Trình quản lý truy vấn của Doctrine trong đó IN
- 22. Sử dụng Doctrine 2 và Repositories, mục đích của Lớp dịch vụ là gì?
- 23. Thanh tiến trình với 2 Chỉ số
- 24. hằng số trường sử dụng trình tạo truy vấn laravel
- 25. Làm thế nào để tạo LEFT JOIN với truy vấn con SELECT bằng cách sử dụng QueryBuilder trong Doctrine 2?
- 26. Học thuyết 2 với nhiều chỉ mục
- 27. MYSQL truy vấn, tham gia 2 bảng của vấn đề
- 28. RavenDB - vấn đề truy vấn - Kết quả/chỉ mục cũ
- 29. Doctrine 2 ArrayPhương pháp lọc theo bộ sưu tập
- 30. Tại sao màn trình diễn của 2 truy vấn này lại khác biệt?
Tôi nhận ra đây là câu trả lời rất cũ, nhưng tôi chỉ muốn chỉ ra rằng điều này sẽ không hoạt động đối với các truy vấn không có bất kỳ mệnh đề WHERE nào. – rpkamp