views:

21

answers:

1

I have a Model with data that I want to use to populate a "Recent XYZ" section on the homepage, which is controlled by the Pages controller.

In the Pages controller, I have the following code:

$this->loadModel('Model');
$this->set('datas', array($this->Model->find('all', array('limit' => 5))));

Then, in Home.ctp, I have tried to access the data via:

if(!empty($datas)) { foreach($datas as $data):
echo $data['0']['Model']['field'];
endforeach; }

I ran debug on the find('all') and it is returning an array, but I don't see anything wrong with my code. And I've tried using find('list') and find('first') and changin the $data['0']['Model']['field'] to $data['Model']['field'] when necessary as a result. But, it still gives an Undefined Index error for Model.

Does anyone know why this is happening?

A: 

You shouldn't put the numbered key if you're iterating over it with a foreach. So,

echo $data['0']['Model']['field'];

should be:

echo $data['Model']['field'];

EDIT: So, to clarify, if you are using find('all'), and iterating over the returned array with foreach, you would want $data['Model']['field']. If you were not iterating, but just wanted the first result, you would use $data[0]['Model']['field']. If you are using find('first'), you could just use $data['Model']['field'], and you would not want to use the foreach in this case.

So I'm a little confused by the context of this. You have copied the Pages controller into controllers directory, and put the above code within the display() method? What do you get when you put pr($datas) in home.ctp?

handsofaten
I tried it without the [0] as well before without avail. When I do the pr($reviews) it shows the initial array and then two array[0]'s before the array['model']. Weird?
Justin
Also, I have a pages_controller.php in the controllers folder (isn't that where it's supposed to be? I don't use a generator...) and then put the above code in the display() method, yes.
Justin
If you're getting the data you want in the array, then the only question is how you iterate over it and print the values you want. It should be pretty easy to figure out -- just reference actual keys in the array. You could even put `pr($data)` in your foreach loop, and see what the array looks like at that moment.
handsofaten