2015-10-23 27 views
5

Tôi bị kẹt trong này trong vài giờ.Truy vấn tùy chỉnh quản trị Sonata trong configureListFields

tôi có lớp học quản trị để liệt kê tất cả các loại và các sản phẩm trong một cột bảng có liên quan (đơn vị sản phẩm): Table example đang liên quan:

protected function configureListFields(ListMapper $listMapper) 
{ 
    $listMapper 
      ->addIdentifier('name') 
      ->add('products') // Entity Product, @ORM\OneToMany 
      ->add('ord') 
    ; 
} 

Những gì tôi cần làm là giấu các sản phẩm không hoạt động từ khi niêm yết dựa trên "(boolean) product.active" nhưng tôi không thể tìm ra. Tôi biết về phương pháp "createQuery" nhưng nó không hoạt động. Khi tôi tạo ra SQL và chạy truy vấn trực tiếp nó hoạt động nhưng ở đây có vẻ như tôi có thể sử dụng ProxyQuery chỉ để lọc Category và sau đó tất cả các sản phẩm được truy vấn trong truy vấn riêng biệt (và truy vấn riêng biệt này tôi không chắc chắn làm thế nào để thay đổi).

public function createQuery($context = 'list') 
{ 
    $query = parent::createQuery($context); 

    $q = new ProxyQuery($query->join(sprintf('%s.products', $query->getRootAlias()), 'p') 
      ->andWhere('p.active = :act')->setParameter('act', true)); 

    return $q; 
} 

Cảm ơn bạn đã giúp đỡ bất kỳ

Trả lời

1

Bạn có thể thay đổi kiểu của lĩnh vực của bạn để null hoặc tổ chức và thêm một query_builder option để thích ứng với truy vấn sử dụng:

protected function configureListFields(ListMapper $listMapper) 
{ 
    $listMapper 
     ->addIdentifier('name') 
     ->add('products', null, array(
      'query_builder' => function(EntityRepository $er) { 
       return $er->createQueryBuilder('qb') 
          ->leftjoin('qb.products', 'p') 
          ->where('p.active = :act') 
          ->setParameter('act', true) 
      } 
    )); 
} 

tôi đã không kiểm tra nó với một mối quan hệ oneToMany.

Có một số thông tin trong này topic

+0

Cảm ơn trả lời của bạn nhưng tôi vẫn không thể làm cho nó làm việc. Có vẻ như 'query_builder' bằng cách nào đó không được sử dụng. Tôi đã thử đặt chết(); trong chức năng đó và không có gì xảy ra. –

+0

Hãy chắc chắn bao gồm toàn bộ đường dẫn đến EntityRepository, không chỉ tên :) Nó hoạt động như một sự quyến rũ đối với tôi – Cowwando

Các vấn đề liên quan