Wednesday, August 27, 2014

Basic data fetching

Hello, I'm fairly new to cakephp and have a few pretty basic questions about fetching data from arrays:

here is what i have set up

Models:

class Customer extends AppModel {


 
public $hasMany = array('Device','Change');
 
}

class Device extends AppModel {


 
public $belongsTo = 'Customer';
}


class Change extends AppModel {


 
public $belongsTo = 'Customer';
}


now anytime I 
$this->set('customerinfo',$this->Customer->find('first',array('conditions' => array('id'=>$customerId))));

or find('all'), i get everything on that customer, including all devices and all thousands of changes.

One of my questions is how should i manage that relationship since i dont want to pull that much change data just to get a customer ID, name and address?

Have I built my model relationships too simple to allow for me for limiting what is being sent?


question #2

doing the above statement, i get the following returned:


array(  	'Customer' => array(  		'id' => '33',  		'name' => 'customer#33',  		'totchngavail' => '5',  		'totalchanges' => '0'  	),  	'Device' => array(  		(int) 0 => array(  			'id' => '6',  			'customer_id' => '33',  			'name' => 'device4',  			'type' => 'server',  			'os' => 'aix',  			'ip' => '123.123.123.123'  		),  		(int) 1 => array(  			'id' => '31',  			'customer_id' => '33',  			'name' => 'dev2',  			'type' => 'server',  			'os' => 'linux',  			'ip' => '123.123.123.123'  		)  	),  	'Change' => array(  		(int) 0 => array(  			'id' => '2',  			'customer_id' => '33',  			'name' => 'change12',  			'number' => '1234567890'  		),  		(int) 1 => array(  			'id' => '4',  			'customer_id' => '33',  			'name' => 'change14',  			'number' => '1234567890'  		)
                     ///many many more changes  	)  )


When i try and retrieve all the devices for that customer in a select box for example i try with:

echo $this->Form->input('device_id',array('label'=> 'Device Name','style' => 'width: 150px;','type' => 'select',
'options' => displayDevices($customerinfo)));

and here is the displayDevices function:

function displayDevices($customerinfo){
//a list 'header' so no device is selected by default
 $var
=array(NULL=>'---');
 
foreach($customerinfo['Device'] as $device)
 
{
 $var
+=array($device['id']=>$device['name']);
 
}
 
return $var;
};


So my question is: shouldnt there be a better way of displaying that select list? maybe by some form of $customerinfo['Device']['name'] right into the form input? When i do this i get an index error. I dont see how i should have to manually build an array to populate the select list when the complete customer array with devices comes in from the controller.


thanks in advance for your advice.

--
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@googlegroups.com.
To post to this group, send email to cake-php@googlegroups.com.
Visit this group at http://groups.google.com/group/cake-php.
For more options, visit https://groups.google.com/d/optout.

No comments: