php symfony doctrine2 doctrine symfony-2.7

php - Cómo se filtran los datos dentro de la entidad objeto en Symfony 2 y Doctrine



doctrine2 symfony-2.7 (2)

Puede usar la clase Criteria para filtrar el Arraycollection de características relacionadas

class Product { protected $features; // (oneToMany) // ... protected getFeatures() { // default method return $this->features; } protected getImportantFeatures() { // my custom method $criteria = /Doctrine/Common/Collections/Criteria::create() ->where(/Doctrine/Common/Collections/Criteria::expr()->eq("important", true)); return $this->features->matching($criteria); } }

En rama

Product: {{ product.name }} Important features: {% for feature in product.getImportantFeatures() %} - {{ feature.name }} {% endfor %}

Tengo dos entidades: Product y Feature . Product tiene muchas otras Features (relación uno a muchos). Cada Feature tiene un nombre y un estado importante (verdadero si la característica es importante, falsa si no). Quiero incluir en TWIG todas las características importantes para mi producto.

La siguiente solución es muy fea:

Product: {{ product.name }} Important features: {% for feature in product.features %} {% if feature.important == true %} - {{ feature.name }} {% endif %} {% endfor %}

Entonces quiero obtener:

Product: {{ product.name }} Important features: {% for feature in product.importantFeatures %} - {{ feature.name }} {% endfor %}

Debo filtrar los datos en el objeto de la entidad, pero ¿cómo?

// MyBundle/Entity/Vehicle.php class Product { protected $features; // (oneToMany) // ... protected getFeatures() { // default method return $this->features; } protected getImportantFeatures() { // my custom method // ? what next ? } } // MyBundle/Entity/Feature.php class Feature { protected $name; // (string) protected $important; // (boolean) // ... }


Puedes hacerlo desde el repositorio

$featureEntityRepository->findBy(array( ''impoertant'' => true, ''product'' => $product->getId() ));