update tutorial español doctrine2 doctrine

doctrine2 - tutorial - El predicado "IN" con el filtrado de criterios no funciona



doctrine windows (1)

Intento filtrar una recopilación de doctrinas directamente con Criteria para evitar toda la carga de recopilación cuando estoy buscando solo ciertos elementos.

public function bar() { $entity = ...; // not useful for the example $property = ...; // not useful for the example but is a getter for a collection $ids = [22, 13]; // just for the sake of this example $criteria = Criteria::create()->where(Criteria::expr()->in("id", $ids)); return $this->foo($entity, $property, $criteria); } public function foo($entity, $property, Criteria $criteria) { return $this->propertyAccessor->getValue($entity, $property)->matching($criteria); }

El código anterior producirá este DQL (mostraré solo la última parte relevante)

Y te.id =? '' con params [22,13]:

Y entonces, este error

Aviso: Matriz para convertir cadenas

Supongo que se genera un DQL incorrecto aquí, pero no sé por qué.

¿Alguien tiene una pista?

Esta es la propiedad de la colección con la que trato de hacer coincidir

/** * @ORM/ManyToMany(targetEntity="Vendor/Bundle/Entity/Foo") * @ORM/JoinTable(name="foo_bar", * joinColumns={@ORM/JoinColumn(name="foo_bar_id", referencedColumnName="id", onDelete="cascade")}, * inverseJoinColumns={@ORM/JoinColumn(name="foo_id", referencedColumnName="id")} * ) */ protected $foo;

Editar

Si trato de volcar el objeto $criteria , obtengo esto

Criteria {#10958 ▼ -expression: Comparison {#10956 ▼ -field: "id" -op: "IN" -value: Value {#10948 ▼ -value: array:2 [▼ 0 => 22 1 => 13 ] } } -orderings: [] -firstResult: null -maxResults: null }

Entonces esto parece ser correcto. También sé que podría usar expresiones "o", pero preferiría entender por qué ocurre este problema.

Edit2

Cambié $criteria siguiente manera

$criteria = Criteria::create() ->where(Criteria::expr()->eq(''id'', 22)) ->orWhere(Criteria::expr()->eq(''id'', 13));

Como ahora, la consulta es correcta pero la colección no: está vacía, pero no debería estarlo (si ejecuto manualmente esa consulta desde mysql cli, obtengo lo que esperaba).

Asi que ...

PREGUNTA EXTRA

¿Puedo usar Criteria solo dentro de getters o repositorio de entidades si la colección no está cargada?

Edit3 - Pregunta de bonificación

Parece que si no tienes una colección ya cargada, los criterios de coincidencia son bastante inútiles. De hecho, si doy un bucle a los elementos de la colección y llamo a algunos captadores y, luego, uso los criterios, la colección resultante es lo que estaba buscando (pero, por supuesto, TODOS los elementos de la colección ya están cargados)