Pregunta

Tengo un modelo de empleado, que Pertenece a una dirección-modelo. Cuando voy a buscar los datos del modelo de los empleados, el registro de direcciones asociado obtiene exagerado demasiado. Además, el modelo de direcciones tiene un FULL_NAME virtualField. Esto se parece a esto:

Array 
(
[0] => Array
       (
        [Employee] => Array
            (
                [id] => 1
                [address_id] => 33
                [username] => ...
                ...
            )

        [Address] => Array
            (
                [id] => 33
                [firstname] => Blah
                [full_name] => Blah Blubb
                ...
            )

    )

[1] => Array  (
        [Employee] => Array   (
                [id] => 2
                ...

Quiero han incluido esta virtualField en la parte de los empleados de la matriz de datos también, como

Array (
[0] => Array (
        [Employee] => Array
            (
                [id] => 1
                [full_name] => Blah Blubb
                ...
            )

Tis no es posible resolver con sólo añadir

$virtualFields = array(
    'full_name' => 'CONCAT_WS(" ", Address.firstname, Address.surname)',
);

para el modelo de los empleados, ya que el libro de cocina afirma Existe una propuesta de solución ( "copiar virtualFields de un modelo a otro en tiempo de ejecución cuando se necesita para acceder a ellos"), pero no entiendo esta solución. ¿Dónde tengo que poner esto? En el controlador? En el modelo de la función de búsqueda?

Gracias por la Ayuda

¿Fue útil?

Solución 2

Estoy haciendo esto a mano ahora en la función de devolución de llamada afterFind modelo:

array_walk($results,function(&$a){
        if(isset($a['Address']['full_name'])) {
            $a['Employee']['full_name'] = $a['Address']['full_name'];
            unset($a['Address']);
        }
    });

Puede ser que no es agradable, pero funciona.

Otros consejos

http: // libro. cakephp.org/view/1608/Virtual-fields#Virtual-fields-and-model-aliases-1632

  

La implementación de virtualFields en 1.3 tiene algunas limitaciones.   En primer lugar no se puede utilizar en los modelos virtualFields asociados para   condiciones, orden, o campos matrices. Si lo hace, generalmente dará como resultado   error de un SQL como los campos no se sustituyen por el ORM. Esto es   porque es difícil estimar la profundidad a la que un asociado   modelo podría ser encontrado.

añadir lo siguiente a su modelo:

public function __construct($id=false,$table=null,$ds=null){
    parent::__construct($id,$table,$ds);
    $this->virtualFields = array(
        'full_name'=>"CONCAT(`Address.firstname`,' ',`Address.surname`)"
    );
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top