Mostrar en un select el resultado de query()

172 views
Skip to first unread message

José

unread,
Aug 31, 2010, 3:16:02 PM8/31/10
to CakePHP en Español
Hola a todos, tengo un problema, estoy haciendo consultas
personalizadas con query() y resulta que me da un array como el que se
explica en la documentación oficial, es decir como el siguiente:
Array
(
[0] => Array
(
[Fotografia] => Array
(
[id] => 1304
[user_id] => 759
)
)

[1] => Array
(
[Fotografia] => Array
(
[id] => 1305
[user_id] => 759
)
)
)
El caso es que quiero mostrar esos resultados en un select multiple,
pero apara ello debe tener una estructura como esta:
Array
(
//[id] => 'displayValue',
[1] => 'displayValue1',
[2] => 'displayValue2',
[4] => 'displayValue4',
[5] => 'displayValue5',
[6] => 'displayValue6',
[3] => 'displayValue3',
)
Alguien tiene alguna idea de como puedo hacerlo estaba pensando que
quizá se pueda recorrer en la vista con foreach anidados hasta llegar
a los valores que necesito imprimir ó alguien conoce una mejor
solución.
Ya busque en las entradas de este grupo pero no he encontrado nada,
hasta ahorita.

Muchas por sus ayuda :)

Fran Iglesias

unread,
Aug 31, 2010, 3:24:59 PM8/31/10
to cakep...@googlegroups.com
Hola,

El 31/08/2010, a las 21:16, José escribió:

> Alguien tiene alguna idea de como puedo hacerlo estaba pensando que
> quizá se pueda recorrer en la vista con foreach anidados hasta llegar

Set::combine($array, '/Fotografia/id', '/Fotografia/campo');


---
Fran Iglesias <cakep...@gmail.com>
http://cakephpilia.blogspot.com

Eugenio

unread,
Aug 31, 2010, 4:13:48 PM8/31/10
to cakep...@googlegroups.com
Fran que buena respuesta! yo estaba pensando locuras con array_shift,
extract, compact, array_key ............. :S :S

Saludos

El día 31 de agosto de 2010 16:24, Fran Iglesias
<cakep...@gmail.com> escribió:

> --
> Has recibido este mensaje porque estás suscrito al grupo "CakePHP en Español" de Grupos de Google.
> Para publicar una entrada en este grupo, envía un correo electrónico a cakep...@googlegroups.com.
> Para anular tu suscripción a este grupo, envía un correo electrónico a cakephp-esp...@googlegroups.com
> Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/cakephp-esp?hl=es.
>
>

José

unread,
Aug 31, 2010, 4:58:52 PM8/31/10
to CakePHP en Español
Muchas gracias Fran, me ayudastes mucho, casi lo soluciono por
completo.
Tengo lo siguiente:
$result = Set::combine($array, '/Modelo/id', '/Modelo/campo');
funciona perfectamente y tambien funciona de esta otra forma:
$result= Set::combine($array, '{n}.Modelo.id', '{n}.Modelo.campo');
Lo que no me funciona es el Modelo.campo ya que es un alias que le he
dado a dos campos concatenados, unidos por un espacio, en la consulta.
Intente tambien hacerlo en el combine:
$result = Set::combine($array, '/Modelo/id', '/Modelo/campo1'.' '.'/
Modelo/campo2');
Pero tampoco me resulto, me imagino que también habrá solución, me
podrían dar otra ayudita.

Muchas gracias




On 31 ago, 13:24, Fran Iglesias <cakephpi...@gmail.com> wrote:
> Hola,
>
> El 31/08/2010, a las 21:16, José escribió:
>
> > Alguien tiene alguna idea de como puedo hacerlo estaba pensando que
> > quizá se pueda recorrer en la vista con foreach anidados hasta llegar
>
> Set::combine($array, '/Fotografia/id', '/Fotografia/campo');
>
> ---
> Fran Iglesias <cakephpi...@gmail.com>http://cakephpilia.blogspot.com

Fran Iglesias

unread,
Aug 31, 2010, 5:12:33 PM8/31/10
to cakep...@googlegroups.com
Hola,

El 31/08/2010, a las 22:58, José escribió:

> Lo que no me funciona es el Modelo.campo ya que es un alias que le he
> dado a dos campos concatenados, unidos por un espacio, en la consulta.
> Intente tambien hacerlo en el combine:

Si en el array no está el campo construido con los otros dos, Set::combine no lo va a hacer. Tienes que obtenerlo concatenado o procesar el resultado posteriormente. ¿Cómo es la query?

José

unread,
Aug 31, 2010, 5:16:14 PM8/31/10
to CakePHP en Español
Gracia pos responder tan rapido.

Bueno es esta:

$zonasr = $this->ImagenesSlider->Zona->query("SELECT Zona.id,
CONCAT(Pais.pais, ' ', Zona.nombre) AS nombre FROM zonas AS Zona
INNER JOIN paises AS Pais ON (Pais.id = Zona.pais_id) WHERE
Pais.estatus = '1'");

Asi no me funciona, llamándolo en set::combine como nombre (alias dado
en el query), tampoco concatenandolo en el combine.
> Fran Iglesias <cakephpi...@gmail.com>http://cakephpilia.blogspot.com

Fran Iglesias

unread,
Aug 31, 2010, 5:21:24 PM8/31/10
to cakep...@googlegroups.com
Se me olvidó pedirte ver el resultado

debug($zonasr);

El 31/08/2010, a las 23:16, José escribió:

> $zonasr = $this->ImagenesSlider->Zona->query("SELECT Zona.id,

---

José

unread,
Aug 31, 2010, 5:41:41 PM8/31/10
to CakePHP en Español
Me da esto:

Array
(
[0] => Array
(
[Zona] => Array
(
[id] => 1
)

[0] => Array
(
[nombre] => El Salvador Occidental
)

)

[1] => Array
(
[Zona] => Array
(
[id] => 2
)

[0] => Array
(
[nombre] => El Salvador Central
)

)

[2] => Array
(
[Zona] => Array
(
[id] => 3
)

[0] => Array
(
[nombre] => El Salvador Oriental
)

)
)

On 31 ago, 15:21, Fran Iglesias <cakephpi...@gmail.com> wrote:
> Se me olvidó pedirte ver el resultado
>
> debug($zonasr);
>
> El 31/08/2010, a las 23:16, José escribió:
>
> > $zonasr = $this->ImagenesSlider->Zona->query("SELECT Zona.id,
>
> ---
> Fran Iglesias <cakephpi...@gmail.com>http://cakephpilia.blogspot.com

José

unread,
Aug 31, 2010, 5:43:07 PM8/31/10
to CakePHP en Español
Tal parece que el indice no esta, en su lugar aparece 0. No entiendo a
que se debe.

José

unread,
Aug 31, 2010, 6:00:42 PM8/31/10
to CakePHP en Español
Y bueno entonces asi seria la solucion, se me olvidaba.
$zonas = Set::combine($zonasr, '{n}.Zona.id', '{n}.0.nombre');
0 en lugar del nombre del modelo, me gustaría saber como darle un
nombre, pero en fin asi lo solucione.

Muchas Gracias Fran, me ayudaste mucho.

Geneller Naranjo

unread,
Aug 31, 2010, 6:00:42 PM8/31/10
to cakep...@googlegroups.com
esta bien hacer $result= Set::combine($array, '{n}.Modelo.id', '{n}.0.campo');

yo lo he hecho un par de veces y no problem, suerte con eso

--
Has recibido este mensaje porque estás suscrito al grupo "CakePHP en Español" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a cakep...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a cakephp-esp...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/cakephp-esp?hl=es.




--
atentamente
Geneller Naranjo Alzate.

José

unread,
Aug 31, 2010, 6:02:52 PM8/31/10
to CakePHP en Español
Gracias Geneller, por confirmar la solución.

On 31 ago, 16:00, Geneller Naranjo <genell...@gmail.com> wrote:
> esta bien hacer $result= Set::combine($array, '{n}.Modelo.id',
> '{n}.0.campo');
>
> yo lo he hecho un par de veces y no problem, suerte con eso
>
> > cakephp-esp...@googlegroups.com<cakephp-esp%2Bunsubscribe@googlegr oups.com>

Ignacio Zamora

unread,
Aug 31, 2010, 7:18:35 PM8/31/10
to cakep...@googlegroups.com
For the record. Los campos calculados no pertenecen al modelo, y cake tiene que ponerlos en algún lugar, por eso aparecen en el índice 0.

Me parece que el driver para Postgresql, siguiendo una nomenclatura especial, hace precisamente que el campo calculado pertenezca al modelo y aparezca debajo de su índice correspondiente.

2010/8/31 José <samue...@hotmail.com>



--
Ignacio Alberto Zamora Esqueda
Ingeniero de Software
Corporación Tectronic, S.A. De C.V.
Tels: (33) 3615-44-11 y 36-15-45-11
Fax: (33) 3615-46-11
sist...@tectronic.com.mx
www.tectronic.com.mx

Fran Iglesias

unread,
Sep 1, 2010, 1:51:06 AM9/1/10
to cakep...@googlegroups.com
Hola,

El 01/09/2010, a las 1:18, Ignacio Zamora escribió:

> For the record. Los campos calculados no pertenecen al modelo, y cake tiene que ponerlos en algún lugar, por eso aparecen en el índice 0.

A partir de la versión 1.3 ya se pueden usar campos calculados "a la cake"

http://book.cakephp.org/es/view/1608/Virtual-fields

Ignacio Zamora

unread,
Sep 1, 2010, 10:02:40 AM9/1/10
to cakep...@googlegroups.com
Gracias Fran!

2010/9/1 Fran Iglesias <cakep...@gmail.com>
--
Has recibido este mensaje porque estás suscrito al grupo "CakePHP en Español" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a cakep...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a cakephp-esp...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/cakephp-esp?hl=es.

Reply all
Reply to author
Forward
0 new messages