¿Cómo obtener el campo definido en el generador de consultas de sonataadmin?
-
21-12-2019 - |
Pregunta
Existe el siguiente código
$form->with('Item')->add('parent', null, array(
'label' => 'Category',
'required' => true,
'query_builder' =>
function($er) use ($id) {
$qb = $er->createQueryBuilder('p');
if ($id){
$qb->where('p.id <> :id')
->setParameter('id', $id);
}
$qb->orderBy('p.root, p.lft', 'ASC');
return $qb;
}
.........
El resultado es la colección de objetos de entidad que se proporciona a la cadena (método __toString).Devuelve el campo de nombre.Pero necesito obtener otro campo: URL.
¿Cómo obtener el valor de la URL en lugar del nombre en el formulario de lista de selección?El objeto de retorno de tipo query_builder => ¿cómo cambiar esta forma para que funcione de la misma manera query_builder?
Solución
No trabajé con los formularios de SonataAdminBundle, pero creo que funciona absolutamente como los formularios de Symfony.Todo lo que necesitas aquí es agregar 'class'
y 'property'
valores a su lista de opciones:
$form->with('Item')->add('parent', null, array(
'class' => 'Acme\DemoBundle\Entity\Category',
'property' => 'url',
'label' => 'Category',
'required' => true,
'query_builder' =>
function($er) use ($id) {
$qb = $er->createQueryBuilder('p');
if ($id){
$qb->where('p.id <> :id')
->setParameter('id', $id);
}
$qb->orderBy('p.root, p.lft', 'ASC');
return $qb;
}
propiedad - es el nombre del campo en su entidad que representará el valor de su entidad en lugar de llamar __toString()
.Pero también...Si siempre necesita representar su entidad como URL, simplemente puede anularla __toString()
método en la clase Entidad a algo como eso:
public function __toString() {
return $this->url;
}