fuel / orm

Fuel PHP Framework - Fuel v1.x ORM
http://fuelphp.com/docs/packages/orm/intro.html
152 stars 96 forks source link

first / last modification suggestion #24

Closed santiagofs closed 13 years ago

santiagofs commented 13 years ago

Jelmer, I was reading http://fuelphp.com/forums/topics/view/1198 and the confusion with the kind of objects the find method can return.

I think perhaps is better the find method only to accept an id or an options array, and implement the first and last options as methods, like this: $model->find()->where()->last(); or $model->find()->where()->get_one('last');

I know you like consistency :). I think this way improves that and avoids confusions, besides helps to refine queries. Just a suggestion. Best regards. Santiago.

jschreuder commented 13 years ago

This is why I made method chaining completely different from find() with array config. I hate first/last, if it was completely up to me it would be just 'one' or 'all'. Using either first or last changes the order_by condition, which can be usefull for simple queries, but is impossible for more advanced queries (with multiple order_by conditions). Using first/last is just when you're doing a Q&D query, not when you're doing serious stuff, if you're doing something more advanced you should do the ordering yourself and not have some automagic change it for you. This is why I don't think this is a good idea, and if I didn't think any of the other main devs would scream at me for it I'd remove first/last from the find() array usage as well and replace it with 'one' (reverse the order yourself if you want the last).

santiagofs commented 13 years ago

Ok, I understand, and must say neither like the 'first' and 'last' options. Finding and ID means you know there's only one, while 'first' and 'last' implies there's a bunch of results and you are filtering it. Then the idea of filter leads to use statements like 'where'. I agree with you, but think this wasn't the last time someone will get confused about this behavior.

In other subject, I liked the way you resolved the model relations queries and method chaining using Model::query() Perhaps limiting the use of ::find to results and ::query for method chaining will ensure not having confusions.

I don't want to bother you, know you have a lot of work to do (and I really appreciate your effort and your great work). So, if you think I'm pushing too much, let me know. My intention is only to be helpful.