world tutorial instalar hello espaƱol ejemplos cakephp cakephp-2.3

instalar - cakephp tutorial



creando campos virtuales sobre la marcha en CakePHP (2)

puedes crear campos virtuales sobre la marcha. Su sintaxis es correcta, pero también puede hacerlo de esta manera:

$this->Order->virtualFields[''totalCost''] = ''SUM(`OrderDetail`.`cost`)''; $this->Order->virtualFields[''totalItem''] = ''COUNT(`OrderDetail`.`order_id`)'';

el problema aquí es que Order está en una relación de HasMany con OrderDetail. CakePHP en este caso no se une a las tablas, sino que realiza dos consultas, una para las Órdenes y otra para el Detalle de Órdenes y luego fusiona los conjuntos de registros.

¿Qué puedes hacer?

puede paginar OrderDetail en lugar de Order, y agruparlo por Order.id

$fields = array ( ''Order.id'', ''Order.order_key'', ''Order.delivery_date'', ''Order.totalItem'', ''Order.totalCost'' ); $this->paginate[''OrderDetail''] = array ( "fields"=> $fields, ''conditions'' => array("AND" => array($condition, "Order.status" => 3)), ''limit'' => ''50'', ''order'' => array(''Order.id'' => ''DESC''), ''group'' => array(''Order.id'') );

Deseo crear campos virtuales sobre la marcha.

Mi orden y detalles de pedido son como ...

//Order Model class Order extends AppModel { public $name = ''Order''; public $actsAs = array(''Containable''); public $hasMany = array( ''OrderDetail'' => array( ''className'' => ''OrderDetail'', ''foreignKey'' => ''order_id'', ''dependent'' => true ), ); } //OrderDetail Model class OrderDetail extends AppModel { public $name = ''OrderDetail''; public $actsAs = array(''Containable''); public $belongsTo = array( ''Order'' => array( ''className'' => ''Order'', ''foreignKey'' => ''order_id'', ''dependent'' => true ), ); }

La relación modelo es así. Estoy creando campos virtuales sobre la marcha para poder contar la cantidad de elementos y su costo en orden de paginación. Sé la forma extraña de requestAction . Es su manera de otro que puedo realizar mi tarea.

Mi código probado es

$this->Order->virtualFields[''totalCost''] = 0; $this->Order->virtualFields[''totalItem''] = 0; $fields = array(''Order.id'', ''Order.order_key'', ''Order.delivery_date'',''COUNT(`OrderDetail`.`order_id`) AS `Order__totalItem`'', ''SUM(`OrderDetail`.`cost`) AS `Order__totalCost`''); $this->paginate[''Order''] = array("fields"=>$fields, ''conditions'' => array("AND" => array($condition, "Order.status" => 3)), ''limit'' => ''50'', ''order'' => array(''Order.id'' => ''DESC''));

Me termina con la columna mysql no encontrada Columna Unknown column ''OrderDetail.order_id'' in ''field list'' . No he puesto recursivo ni vinculado mi modelo para encontrar algo más. ¿Por qué se genera este error? ¿Cómo puedo lograr mi objetivo?


Puede crear campos virtuales sobre la marcha con cakephp usando esto:

class User extends AppModel { public $virtualFields = array( ''full_name'' => ''CONCAT(User.first_name, " ",User.last_name)'' ); }

Aquí full_name es un campo virtual sobre la marcha que crea el nombre completo del usuario usando el nombre y apellido.