Using CakePHP 2.0 here. The title is a bit misleading, so to clear things up – I have session array which is populated with ids of products as user adds them to cart. So this array goes like [0] => 25, [1] => 70 etc. Let’s say this array is called $products.
What I want to ask is is there some possibility to have array which I get by using ‘find’ model’s function (‘conditions’ => array(‘Product.id’ => $products)) to be sorted not by some of Model.field values (as in ‘order’ option), but by $products array indices, so that when I render the products content in view I would get all those products in cart sorted in such sequence as user were adding them.
Here’s an example –
Session array $products:
[0] => 35,
[1] => 15,
[2] => 25
Then I pass this array to conditions of find function:
$list = $this->Product->find('all', array('conditions' => array('Product.id' => $products)));
In the end $list gives me array which sorted by product.id. So instead of having:
[0] => Array
(
[Product] => Array
(
[id] => 35 )),
[1] => Array
(
[Product] => Array
(
[id] => 15 )),
[2] => Array
(
[Product] => Array
(
[id] => 25 ))
I get:
[0] => Array
(
[Product] => Array
(
[id] => 15 )),
[1] => Array
(
[Product] => Array
(
[id] => 25 )),
[2] => Array
(
[Product] => Array
(
[id] => 35 ))
So far all the answers doesn’t solve my problem. Please, pay closer attention to the example I gave, it’s very simple, but the answers provided are in different key.
Again, I need final array $list to be sorted by indices of session array $products, but I get $list sorted by Product.id field, even though I didn’t specify any 'find(array('order'=> ...))' at all and even tried to set it to false.
Don’t want to sound rude, but all of responses to my question were about how to order my array by Product id (which was clearly not what I asked) or suggestions on doing manual sql queries which is inappropriate. Seems like I couldn’t properly describe what I needed, but I tried to make it as clear as possible, sorry.
I stumbled upon a solution while trying to find how to ‘disable order’ in cake. So basically what you need to do is to have an array (let’s call it $queue) where you keep product ids as they are added to cart, and then in ‘order’ option in find model function (or paginate) you should provide it like:
$queue might look like this, as example:
In the end you get $list array in which the order of products is same as in $queue. If you didn’t specify ‘order’ then you would get you $list array like this: