Preventing associated queries on a hasMany model with find
I have a model that has several hasMany associations to other models. One thing I have noticed is that when I make a query against the parent table, all of the associated tables are queried as well. For performances sake, I would like to prevent this, as I do not need this data on every call to the parent model.

This is my current parent model:

    class UserEntity extends UserAgentAppModel {
	var $name = 'UserEntity';
	var $primaryKey = 'entity_id';
	var $actsAs = array('EavEntity');

	var $validate = array(
		'user_name'=>array(
			'rule'=>'isUnique',
			'message'=>'This username has already been taken. Please try again'
	),
		'user_pass' => array(
			'rule' => array('between', 8, 16),
			'message' => 'Passwords must be between 8 and 16 characters long.')

	);

	var $hasMany = array(
		'UserEntityVarchar' => array(
			'className' => 'UserEntityVarchar',
			'foreignKey' => 'entity_id',
			'isEav' => 'true'
		),
		'UserEntityDatetime' => array(
			'className' => 'UserEntityDatetime',
			'foreignKey' => 'entity_id',
			'isEav' => 'true'
		),
		'UserEntityInteger' => array(
			'className' => 'UserEntityInteger',
			'foreignKey' => 'entity_id',
			'isEav' => 'true'
		),
		'UserEntityBoolean' => array(
			'className' => 'UserEntityBoolean',
			'foreignKey' => 'entity_id',
			'isEav' => 'true'
		),
		'UserEntityArray' => array(
			'className' => 'UserEntityArray',
			'foreignKey' => 'entity_id',
			'isEav' => 'true'
		)
	);

     );?>


This is what I am seeing in the query log. The issue I am seeing is that queries 12-17 always occur when using find. However, I am using a behavior to pull this data from my eav model.

    1	SHOW FULL COLUMNS FROM `user_entities`		8	8	1
    2	SELECT CHARACTER_SET_NAME FROM INFORMATION_SCHEMA.COLLATIONS WHERE COLLATION_NAME= 'latin1_swedish_ci';		1	1	1
    3	SHOW FULL COLUMNS FROM `user_entity_varchars`		4	4	1
    4	SHOW FULL COLUMNS FROM `user_entity_datetimes`		4	4	1
    5	SHOW FULL COLUMNS FROM `user_entity_integers`		4	4	1
    6	SHOW FULL COLUMNS FROM `user_entity_booleans`		4	4	1
    7	SHOW FULL COLUMNS FROM `user_entity_arrays`		4	4	1
    12	SELECT `UserEntity`.`entity_id`, `UserEntity`.`user_name`, `UserEntity`.`user_pass`, `UserEntity`.`user_status`, `UserEntity`.`user_group`, `UserEntity`.`instance_id`, `UserEntity`.`is_logged_in`, `UserEntity`.`is_visible` FROM `user_entities` AS `UserEntity` WHERE 1 = 1		2	2	0
    13	SELECT `UserEntityVarchar`.`value_id`, `UserEntityVarchar`.`attribute_id`, `UserEntityVarchar`.`entity_id`, `UserEntityVarchar`.`value` FROM `user_entity_varchars` AS `UserEntityVarchar` WHERE `UserEntityVarchar`.`entity_id` IN (1, 2)		3	3	0
    14	SELECT `UserEntityDatetime`.`value_id`, `UserEntityDatetime`.`attribute_id`, `UserEntityDatetime`.`entity_id`, `UserEntityDatetime`.`value` FROM `user_entity_datetimes` AS `UserEntityDatetime` WHERE `UserEntityDatetime`.`entity_id` IN (1, 2)		0	0	0
    15	SELECT `UserEntityInteger`.`value_id`, `UserEntityInteger`.`attribute_id`, `UserEntityInteger`.`entity_id`, `UserEntityInteger`.`value` FROM `user_entity_integers` AS `UserEntityInteger` WHERE `UserEntityInteger`.`entity_id` IN (1, 2)		0	0	0
    16	SELECT `UserEntityBoolean`.`value_id`, `UserEntityBoolean`.`attribute_id`, `UserEntityBoolean`.`entity_id`, `UserEntityBoolean`.`value` FROM `user_entity_booleans` AS `UserEntityBoolean` WHERE `UserEntityBoolean`.`entity_id` IN (1, 2)		0	0	0
    17	SELECT `UserEntityArray`.`value_id`, `UserEntityArray`.`attribute_id`, `UserEntityArray`.`entity_id`, `UserEntityArray`.`value` FROM `user_entity_arrays` AS `UserEntityArray` WHERE `UserEntityArray`.`entity_id` IN (1, 2)		0	0	0
    22	SHOW FULL COLUMNS FROM `eav_attributes`		8	8	1
    23	SELECT `EavAttribute`.`attribute_id`, `EavAttribute`.`attribute_code`, `EavAttribute`.`backend_model`, `EavAttribute`.`frontend_input`, `EavAttribute`.`frontend_label`, `EavAttribute`.`is_required`, `EavAttribute`.`is_user_defined`, `EavAttribute`.`is_unique` FROM `eav_attributes` AS  `EavAttribute` WHERE `attribute_id` = 5		1	1	0
    24	SELECT `EavAttribute`.`attribute_id`, `EavAttribute`.`attribute_code`, `EavAttribute`.`backend_model`, `EavAttribute`.`frontend_input`, `EavAttribute`.`frontend_label`, `EavAttribute`.`is_required`, `EavAttribute`.`is_user_defined`, `EavAttribute`.`is_unique` FROM `eav_attributes` AS `EavAttribute` WHERE `attribute_id` = 6		1	1	0
    25	SELECT `EavAttribute`.`attribute_id`, `EavAttribute`.`attribute_code`, `EavAttribute`.`backend_model`, `EavAttribute`.`frontend_input`, `EavAttribute`.`frontend_label`, `EavAttribute`.`is_required`, `EavAttribute`.`is_user_defined`, `EavAttribute`.`is_unique` FROM `eav_attributes` AS `EavAttribute` WHERE `attribute_id` = 7


Preventing associated queries on a hasMany model with find
===

I have a model that has several hasMany associations to other models. One thing I have noticed is that when I make a query against the parent table, all of the associated tables are queried as well. For performances sake, I would like to prevent this, as I do not need this data on every call to the parent model.

This is my current parent model:

    class UserEntity extends UserAgentAppModel {
	var $name = 'UserEntity';
	var $primaryKey = 'entity_id';
	var $actsAs = array('EavEntity');

	var $validate = array(
		'user_name'=>array(
			'rule'=>'isUnique',
			'message'=>'This username has already been taken. Please try again'
	),
		'user_pass' => array(
			'rule' => array('between', 8, 16),
			'message' => 'Passwords must be between 8 and 16 characters long.')

	);

	var $hasMany = array(
		'UserEntityVarchar' => array(
			'className' => 'UserEntityVarchar',
			'foreignKey' => 'entity_id',
			'isEav' => 'true'
		),
		'UserEntityDatetime' => array(
			'className' => 'UserEntityDatetime',
			'foreignKey' => 'entity_id',
			'isEav' => 'true'
		),
		'UserEntityInteger' => array(
			'className' => 'UserEntityInteger',
			'foreignKey' => 'entity_id',
			'isEav' => 'true'
		),
		'UserEntityBoolean' => array(
			'className' => 'UserEntityBoolean',
			'foreignKey' => 'entity_id',
			'isEav' => 'true'
		),
		'UserEntityArray' => array(
			'className' => 'UserEntityArray',
			'foreignKey' => 'entity_id',
			'isEav' => 'true'
		)
	);

     );?>


This is what I am seeing in the query log. The issue I am seeing is that queries 12-17 always occur when using find. However, I am using a behavior to pull this data from my eav model.

    1	SHOW FULL COLUMNS FROM `user_entities`		8	8	1
    2	SELECT CHARACTER_SET_NAME FROM INFORMATION_SCHEMA.COLLATIONS WHERE COLLATION_NAME= 'latin1_swedish_ci';		1	1	1
    3	SHOW FULL COLUMNS FROM `user_entity_varchars`		4	4	1
    4	SHOW FULL COLUMNS FROM `user_entity_datetimes`		4	4	1
    5	SHOW FULL COLUMNS FROM `user_entity_integers`		4	4	1
    6	SHOW FULL COLUMNS FROM `user_entity_booleans`		4	4	1
    7	SHOW FULL COLUMNS FROM `user_entity_arrays`		4	4	1
    12	SELECT `UserEntity`.`entity_id`, `UserEntity`.`user_name`, `UserEntity`.`user_pass`, `UserEntity`.`user_status`, `UserEntity`.`user_group`, `UserEntity`.`instance_id`, `UserEntity`.`is_logged_in`, `UserEntity`.`is_visible` FROM `user_entities` AS `UserEntity` WHERE 1 = 1		2	2	0
    13	SELECT `UserEntityVarchar`.`value_id`, `UserEntityVarchar`.`attribute_id`, `UserEntityVarchar`.`entity_id`, `UserEntityVarchar`.`value` FROM `user_entity_varchars` AS `UserEntityVarchar` WHERE `UserEntityVarchar`.`entity_id` IN (1, 2)		3	3	0
    14	SELECT `UserEntityDatetime`.`value_id`, `UserEntityDatetime`.`attribute_id`, `UserEntityDatetime`.`entity_id`, `UserEntityDatetime`.`value` FROM `user_entity_datetimes` AS `UserEntityDatetime` WHERE `UserEntityDatetime`.`entity_id` IN (1, 2)		0	0	0
    15	SELECT `UserEntityInteger`.`value_id`, `UserEntityInteger`.`attribute_id`, `UserEntityInteger`.`entity_id`, `UserEntityInteger`.`value` FROM `user_entity_integers` AS `UserEntityInteger` WHERE `UserEntityInteger`.`entity_id` IN (1, 2)		0	0	0
    16	SELECT `UserEntityBoolean`.`value_id`, `UserEntityBoolean`.`attribute_id`, `UserEntityBoolean`.`entity_id`, `UserEntityBoolean`.`value` FROM `user_entity_booleans` AS `UserEntityBoolean` WHERE `UserEntityBoolean`.`entity_id` IN (1, 2)		0	0	0
    17	SELECT `UserEntityArray`.`value_id`, `UserEntityArray`.`attribute_id`, `UserEntityArray`.`entity_id`, `UserEntityArray`.`value` FROM `user_entity_arrays` AS `UserEntityArray` WHERE `UserEntityArray`.`entity_id` IN (1, 2)		0	0	0
    22	SHOW FULL COLUMNS FROM `eav_attributes`		8	8	1
    23	SELECT `EavAttribute`.`attribute_id`, `EavAttribute`.`attribute_code`, `EavAttribute`.`backend_model`, `EavAttribute`.`frontend_input`, `EavAttribute`.`frontend_label`, `EavAttribute`.`is_required`, `EavAttribute`.`is_user_defined`, `EavAttribute`.`is_unique` FROM `eav_attributes` AS  `EavAttribute` WHERE `attribute_id` = 5		1	1	0
    24	SELECT `EavAttribute`.`attribute_id`, `EavAttribute`.`attribute_code`, `EavAttribute`.`backend_model`, `EavAttribute`.`frontend_input`, `EavAttribute`.`frontend_label`, `EavAttribute`.`is_required`, `EavAttribute`.`is_user_defined`, `EavAttribute`.`is_unique` FROM `eav_attributes` AS `EavAttribute` WHERE `attribute_id` = 6		1	1	0
    25	SELECT `EavAttribute`.`attribute_id`, `EavAttribute`.`attribute_code`, `EavAttribute`.`backend_model`, `EavAttribute`.`frontend_input`, `EavAttribute`.`frontend_label`, `EavAttribute`.`is_required`, `EavAttribute`.`is_user_defined`, `EavAttribute`.`is_unique` FROM `eav_attributes` AS `EavAttribute` WHERE `attribute_id` = 7

