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()
));