Giả sử tôi có hai thực thể trong dự án Symfony2 của tôi: Category
và Article
(một danh mục có nhiều bài viết).Doctrine2 (Doctrine 2.1) mong muốn tải trong Symfony2
Trong CategoryRepository
tôi, tôi có phương pháp này:
findAllDummy(){
return $this->createQueryBuilder('c')
->leftJoin('c.Articles a')
->getQuery()->getResult();
}
Nếu tôi nhớ tốt, trong Symfony1.4 (và các phiên bản tương ứng của Học thuyết), các đối tượng trở sẽ có thuộc tính 'bài' của họ lấp đầy bởi các đối tượng Article
tương ứng. Bây giờ, trong Symfony2, các đối tượng Proxy được trả về.
Vì vậy, nếu tôi lặp qua các bài viết của một danh mục cụ thể, Vì nhiều truy vấn dưới dạng lặp lại sẽ được thực hiện.
foreach($category->getArticles() as $article){
echo $article->getDoctrine()
->getRepository('')getTitle();
}
Tôi hiểu đây là hành vi tải chậm mặc định của Doctrine2.1.
Câu hỏi 1: giải pháp này tốt hơn như thế nào? N truy vấn thay vì 1.
tôi đã cố gắng để buộc tải háo hức bằng cách làm như sau:
findAllDummy(){
return $this->createQueryBuilder('c')
->leftJoin('c.articles a')
->getQuery()
->setFetchMode('Category', 'articles', 'EAGER')
->getResult();
}
Nhưng kết quả vẫn giữ nguyên.
Câu hỏi 2: cách bắt buộc tải dữ liệu trong Doctrine2?
@Crozin Tôi vẫn còn hơi bối rối ... khi bạn nói "nó định nghĩa những gì cần được tải", bạn có đề cập đến những gì được ngậm nước không? –
@SamSelikoff Vâng, nếu bạn định nghĩa 'fetch = EAGER' trên quan hệ của bài viết, tất cả các bài báo sẽ được nạp (và ngậm nước) khi bạn gọi' categoryRepository-> findOne (321) ' – Crozin
Sự khác nhau giữa tải và dưỡng ẩm là gì? –