cake-php
[Arriba] [Todas las Listas]

Re: Modelo::AfterFind $formato de resultados, asociaciones

To: cake-php@xxxxxxxxxxxxxxxx
Subject: Re: Modelo::AfterFind $formato de resultados, asociaciones
From: AD7six <andydawson76@xxxxxxxxx>
Date: Fri, 28 Jun 2013 04:02:44 -0700 (PDT)
Delivery-date: Fri, 28 Jun 2013 07:02:54 -0400
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20120806; h=x-beenthere:date:from:to:message-id:in-reply-to:references:subject :mime-version:x-original-sender:reply-to:precedence:mailing-list :list-id:x-google-group-id:list-post:list-help:list-archive:sender :list-subscribe:list-unsubscribe:content-type; bh=lV8a9xL2USeDDKFanwgjj8sAUVwhlKAxznb6SWOqmrc=; b=YhJ2n3rF20k5op4jvRTamOfrBjR3m9oP9nKayxLK2m5ga4PYVcxI5cLVTp1HH038DR OOcYyKV1blg+npRo9op2UVyDwVCMJRrcD4pIw3mOiVrY3K+jrKNiqBaDruoj0yvJHzKk gfp+wQNwvV0E9ymI1UT7qZ5JN1HMwnSmSHJUyR6lSZTEULcuG6fBmR6V7a9DRoEmbJ1J OZiTvCyrCgHfMM2AfEk9ZIZipMd/NWlzLvMZI7JIIaI3GXzD3K2bABpXrmSTmJdtFgzT DPlbObHfJQb2w/LFN6rpikUxolyq8Xiz+g2PhJV8jWhkCSG0bcNunxGxXAHbVcdxdE6B coOQ==
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-beenthere:date:from:to:message-id:in-reply-to:references:subject :mime-version:x-original-sender:reply-to:precedence:mailing-list :list-id:x-google-group-id:list-post:list-help:list-archive:sender :list-subscribe:list-unsubscribe:content-type; bh=lV8a9xL2USeDDKFanwgjj8sAUVwhlKAxznb6SWOqmrc=; b=LqnJDKS+RgdOWEmdW9iMyWe0rPXzRg9+Sq/BxNcIwYFaFm0aAxmTLYzOK7wipTq1sb CvMO30IcotXzo/Y6wIaod9nWHX9N0hEvhW84nOdeQ57whMSswdKekPstBd4uahK83rRr fH5M9PK81GQmTXQgt3tdrfbjvI6MMq/Ac0mYF5v6F70LABh3ltV1/sLspgRPqsU/tKT2 /QV1Ef5g8G1FbEMkAG7Dm57hI4klkpXv3LTiQxo0nKeG7ZLHRANyg+ezoTMwygHFbCPS laer6141zEdxegMl5ZSVOXDATjcqmg1UpjXb75i1ZCPnX0BZChxf0xJVJzCobtmwMlR2 sdoQ==
Envelope-to: traductor@xxxxxxxxxxx
In-reply-to: <e3c1b85d-c7b2-4e2e-95cf-a5b68c0b3447@googlegroups.com>
List-archive: <http://groups.google.com/group/cake-php>
List-help: <http://groups.google.com/support/>, <mailto:cake-php+help@googlegroups.com>
List-id: <cake-php.googlegroups.com>
List-post: <http://groups.google.com/group/cake-php/post>, <mailto:cake-php@googlegroups.com>
List-subscribe: <http://groups.google.com/group/cake-php/subscribe>, <mailto:cake-php+subscribe@googlegroups.com>
List-unsubscribe: <http://groups.google.com/group/cake-php/subscribe>, <mailto:googlegroups-manage+1003367825667+unsubscribe@googlegroups.com>
Mailing-list: list cake-php@xxxxxxxxxxxxxxxx; contact cake-php+owners@xxxxxxxxxxxxxxxx
References: <12f3399f-39a3-4690-8bc8-986e870da0a0@googlegroups.com> <c253ea6d-61f4-4357-ba0f-e38cad818f32@googlegroups.com> <1c057a5d-0d1a-4219-b2a0-d056c88ffff9@googlegroups.com> <e3c1b85d-c7b2-4e2e-95cf-a5b68c0b3447@googlegroups.com>
Reply-to: cake-php@xxxxxxxxxxxxxxxx
Sender: cake-php@xxxxxxxxxxxxxxxx

*Damn lo Un *typo:


La $consulta "= falsa" primaria (un *intermediary *hasMany resultado de consulta) parece esto:


variedad(
	(*int) 0 => variedad(
		'*HasManyAssoc' => variedad(
			'*id' => '1'
		)
	),

        ...
)


(Igual cuando todo otro resultado de consulta formatos).

Complacer justo mirar si en duda - es tanto más rápido/más fácil.

ANUNCIO

En viernes, 28 junio 2013 12:59:57 *UTC+2, ANUNCIO7seis escribió:
>
>
>
> En jueves, 27 junio 2013 22:25:02 *UTC+2, *Vanja *Dizdarević escribió:
>>
>> Cuando "solucionado" en el hilo enlacé a en el correo original: 
>
>
>>          función pública *afterFind($resultados, $primario = falso) 
>>                 #cnj (el método_existe($esto, '*doAfterFind')) 
>>                           #cnj ($primario) 
>>                                    #unknown{^*foreach ($resultados como $clave => $*val) 
>>                                             #cnj 
>> (*isset($*val[$esto->*alias])) 
>>                                              
>>         $#nom[$llave][$esto->*alias] = 
>> $esto->*doAfterFind($resultados[$llave][$esto->*alias]); 
>>                                                 } 
>>                                       } 
>>                           } más 
>>                                   #cnj (*isset($resultados[$esto->*primaryKey])) 
>>                                            $#verbcj = 
>> $esto->*doAfterFind($resultados); 
>>                                    } más 
>>                                             #unknown{^*foreach ($resultados como $clave => 
>> $*val) 
>>                                                      #cnj 
>> (*isset($*val[$esto->*alias])) 
>>                                                               #cnj 
>> (*isset($*val[$esto->*alias][$esto->*primaryKey])) 
>>                                                                
>>         $#nom[$llave][$esto->*alias] = 
>> $esto->*doAfterFind($resultados[$llave][$esto->*alias]); 
>>                                                               } más 
>>                                                                
>>         #unknown{^*foreach ($resultados[$llave][$esto->*alias] cuando $llave2=> $*val2) 
>>                                                                         
>>         $#nom[$llave][$esto->*alias][$llave2] = 
>> $esto->*doAfterFind($resultados[$llave][$esto->*alias][$llave2]); 
>>                                                                          
>>      } 
>>                                                                     } 
>>                                                           } 
>>                                                 } 
>>                                       } 
>>                            } 
>>                 } 
>>                  resultados $de regreso; 
>>          } 
>> }
>>
>
> Estas miradas de código para ser manera sobre complejo, posiblemente un *testament al 
> ninguno-valor de lectura 5 año correos viejos en un *google grupo para un marco 
> que es activamente mantenido y aplicando consejo encontrado a ciegas.
>
>
>> Esto presuntamente aplica el mismo "*doAfterFind" método a todos los registros, 
>> a toda costa del formato $de variedad de resultados pasado, tomando a cuenta todo 
>> asociaciones posibles de un modelo primario a este modelo.
>>
>> Las cuestiones reales es: Qué es todos formatos de variedad podemos esperar en 
>> la $variedad de resultados?
>>
>
> Hace aquello te significa todavía no ha mirado =)?
>
> Un contar parece esto:
>
> variedad(
> 	(*int) 0 => variedad(
> 		(*int) 0 => variedad(
> 			'cuenta' => '9'
> 		)
> 	)
> )
>
>
> un encontrar primero parece esto:
>
>
> variedad(
> 	(*int) 0 => variedad(
> 		'*Alias' => variedad(
> 			'*id' => '1'
> 		),
> 		'*HasManyAssoc' => variedad(
> 			(*int) 0 => variedad(
> 				'*id' => '1'
> 			)
> 		)
> 	)
> )
>
>
> un encontrar todo parece esto:
>
> variedad(
>
> 	(*int) 0 => variedad(
> 		'*Alias' => variedad(
> 			'*id' => '1'
> 		),
> 		'*HasManyAssoc' => variedad(
> 			(*int) 0 => variedad(
> 				'*id' => '1'
> 			)
> 		)
> 	),
>
>         ...
> )
>
>
> La $consulta "= falsa" primaria (un *intermediary *hasMany resultado de consulta) parece esto:
>
>
> variedad(
> 	(*int) 0 => variedad(
> 		'*HasManyAssoc' => variedad(
> 			(*int) 0 => variedad(
> 				'*id' => '1'
> 			)
> 		)
> 	),
>
>         ...
> )
>
>
> hay un patrón muy sencillo allí:
>
>
> variedad($*int => variedad('*alias' => variedad('campo' => $valor)));
>
>
> Con una excepción sencilla para *hasMany asociaciones, cuándo incluido en 
> los resultados de la consulta primaria, todo primario encuentra *siempre *tener el mismo formato 
> de resultados.
>
>
>
>> Para citar el *docs:
>>  Si un modelo es *queried como una asociación el formato de$resultados puede 
>> diferir; en vez del resultado normalmente conseguirías de un encontrar operación, 
>> puedes conseguir esto:
>>
>> $variedad = de resultados(
>>     'campo_1' => 'valor1',
>>     'campo_2' => 'valor2');
>>
>>  
>
>> Tan, si deseo el *afterFind para encontrar el dato en la variedad de resultados, tengo que 
>> probar el formato de la variedad o puede confío en $valor primario?
>>
>
> Yo .. Pensarte tendría que parar malgastar vuestro tiempo y *preguntar* cómo para hacer 
> algo específicamente, de la mirada de vuestro *afterFind método, estás 
> escribiendo alguna clase de *appmodel método que está convirtiendo/procesando todos los datos. Correcto ahora está yendo para correr en todas las consultas, bucle en todas las  llaves y por 
> tanto probablemente afectar rendimiento incluso si está haciendo lo que lo quieres 
> para hacer. Eres probablemente mejor de escribir cualquiera un *recursive método para 
> manejar en el formato de resultados entero o un mucho alcance más estrecho método que *
> justo*  lo que específicamente quieres.
>
> *Qué es vuestro *afterFind el método intentando hacer?*
> *
> *
> ANUNCIO
>

-- 
Gustarnos en *FaceBook *https://www.facebook.com/*CakePHP
nos Encuentra en *Twitter *http://*twitter.*com/*CakePHP

--- 
Recibiste este mensaje porque eres *subscribed al *Google Grupos "*CakePHP" grupo.
A *unsubscribe de este grupo y la parón que recibe *emails de él, enviar un *email a pastel-*php+unsubscribe@xxxxxxxxxxxxxxxx.
A correo a este grupo, envía *email a pastel-php@xxxxxxxxxxxxxxxx.
Visita este grupo en *http://grupos.*google.*com/Pastel/de grupo-*php.
Para más opciones, visita *https://grupos.*google.*com/Los Grupos/optan_fuera.



Damn it a typo:


The "$primary = false" query (an intermediary hasMany query result) looks like this:


array(
	(int) 0 => array(
		'HasManyAssoc' => array(
			'id' => '1'
		)
	),

        ...
)


(The same as all other query result formats).

Please just look if in doubt - It's so much faster/easier.

AD

On Friday, 28 June 2013 12:59:57 UTC+2, AD7six wrote:
>
>
>
> On Thursday, 27 June 2013 22:25:02 UTC+2, Vanja Dizdarević wrote:
>>
>> As "solved" in the thread I linked to in the original post: 
>
>
>>          public function afterFind($results, $primary = false) { 
>>                 if (method_exists($this, 'doAfterFind')) { 
>>                           if ($primary) { 
>>                                    foreach ($results as $key => $val) { 
>>                                             if 
>> (isset($val[$this->alias])) { 
>>                                              
>>         $results[$key][$this->alias] = 
>> $this->doAfterFind($results[$key][$this->alias]); 
>>                                                 } 
>>                                       } 
>>                           } else { 
>>                                   if (isset($results[$this->primaryKey])) 
>> { 
>>                                            $results = 
>> $this->doAfterFind($results); 
>>                                    } else { 
>>                                             foreach ($results as $key => 
>> $val) { 
>>                                                      if 
>> (isset($val[$this->alias])) { 
>>                                                               if 
>> (isset($val[$this->alias][$this->primaryKey])) { 
>>                                                                
>>         $results[$key][$this->alias] = 
>> $this->doAfterFind($results[$key][$this->alias]); 
>>                                                               } else { 
>>                                                                
>>         foreach ($results[$key][$this->alias] as $key2=> $val2) { 
>>                                                                         
>>         $results[$key][$this->alias][$key2] = 
>> $this->doAfterFind($results[$key][$this->alias][$key2]); 
>>                                                                          
>>      } 
>>                                                                     } 
>>                                                           } 
>>                                                 } 
>>                                       } 
>>                            } 
>>                 } 
>>                  return $results; 
>>          } 
>> }
>>
>
> This code looks to be way over complex, possibly a testament to the 
> none-value of reading 5 year old posts on a google group for a framework 
> which is actively maintained and applying found advice blindly.
>
>
>> This supposedly applies the same "doAfterFind" method to all records, 
>> regardless of the passed $results array format, taking into account all 
>> possible associations of a primary model to this model.
>>
>> The actual questions is: What are all array formats we can expect in the 
>> $results array?
>>
>
> Does that mean you still haven't looked =)?
>
> a count looks like this:
>
> array(
> 	(int) 0 => array(
> 		(int) 0 => array(
> 			'count' => '9'
> 		)
> 	)
> )
>
>
> a find first looks like this:
>
>
> array(
> 	(int) 0 => array(
> 		'Alias' => array(
> 			'id' => '1'
> 		),
> 		'HasManyAssoc' => array(
> 			(int) 0 => array(
> 				'id' => '1'
> 			)
> 		)
> 	)
> )
>
>
> a find all looks like this:
>
> array(
>
> 	(int) 0 => array(
> 		'Alias' => array(
> 			'id' => '1'
> 		),
> 		'HasManyAssoc' => array(
> 			(int) 0 => array(
> 				'id' => '1'
> 			)
> 		)
> 	),
>
>         ...
> )
>
>
> The "$primary = false" query (an intermediary hasMany query result) looks like this:
>
>
> array(
> 	(int) 0 => array(
> 		'HasManyAssoc' => array(
> 			(int) 0 => array(
> 				'id' => '1'
> 			)
> 		)
> 	),
>
>         ...
> )
>
>
> There's a very simple pattern there:
>
>
> array($int => array('alias' => array('field' => $value)));
>
>
> With a simple exception for hasMany associations, when included in the 
> primary query's results, all primary finds *always *have the same results 
> format.
>
>
>
>> To quote the docs:
>>  If a model is queried as an association the format of$results can 
>> differ; instead of the result you would normally get from a find operation, 
>> you may get this:
>>
>> $results = array(
>>     'field_1' => 'value1',
>>     'field_2' => 'value2');
>>
>>  
>
>> So, if I wish the afterFind to find the data in the results array, I have 
>> to test the format of the array or can I rely on $primary value?
>>
>
> I .. think you should stop wasting your time and *ask* how to do 
> something specifically, from the look of your afterFind method, you're 
> writing some sort of appmodel method that is converting/processing all 
> data. Right now it's going to run on all queries, loop on all keys and 
> therefore probably affect performance even if it's doing what you want it 
> to do. You're probably better of writing either a recursive method to 
> operate on the whole results format or a much narrower scope method that *
> just* does what you specifically want.
>
> *What is your afterFind method trying to do?*
> *
> *
> AD
>

-- 
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP

--- 
You received this message because you are subscribed to the Google Groups "CakePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cake-php+unsubscribe@xxxxxxxxxxxxxxxx.
To post to this group, send email to cake-php@xxxxxxxxxxxxxxxx.
Visit this group at http://groups.google.com/group/cake-php.
For more options, visit https://groups.google.com/groups/opt_out.


<Anterior por Tema] Tema Actual [Siguiente por Tema>