all those (query) just add a bit of "where" clause in the select that you pass to the db. you can use them with db((query) & (query) & (query)) or with db(query)(query)(query) ... the resulting select passed to the db would be the same!
On Tuesday, May 21, 2013 10:43:48 PM UTC+2, [email protected] wrote: > > Hm, but how does it know to return a set object from the product_filter > table rather than the product or filter table? > > And what does these two queries mean when it comes executing the queries? > (db.products.id == db.product_filter.product_id) & > (db.filters.id == db.product_filter.filter_id) & > > Does it work something like this: > > Return the set object that contains the filter name "hoodie" > (db.filters.name == "hoodie") > > Then, knowing the id of the filter from the previous result set, find all > the matching filter id in the product_filter table. > (db.filters.id == db.product_filter.filter_id) > > Now find all the products that has the same filter ids? > (db.products.id == db.product_filter.product_id) & > > But then why even do the last part? Wouldn't db.filters.id == > db.product_filter.filter_id already give you the rows you'd want from > product_filter table? > > On Tuesday, May 21, 2013 4:19:29 PM UTC-4, Anthony wrote: >> >> Note, I'm not sure the fact that a Set is callable is documented in the >> book. >> >> On Tuesday, May 21, 2013 4:14:48 PM UTC-4, Anthony wrote: >>> >>> db(some_query) creates a DAL Set object (on which you can then call >>> methods such as .select(), .update(), etc.). A Set object is also callable, >>> and if you call it by passing in another query, it will simply add the new >>> query as an AND condition. So, that code is just equivalent to: >>> >>> db( >>> (db.products.id == db.product_filter.product_id) & >>> (db.filters.id == db.product_filter.filter_id) & >>> (db.filters.name == "hoodie") >>> ) >>> >>> or >>> >>> db(db.products.id == db.product_filter.product_id)(db.filters.id == db. >>> product_filter.filter_id)\ >>> (db.filters.name == "hoodie") >>> >>> The idea is that you can create a base Set object and then use it to >>> create more specific sets by adding different conditions. >>> >>> Anthony >>> >>> On Tuesday, May 21, 2013 4:02:00 PM UTC-4, [email protected] wrote: >>>> >>>> Is there a section in the online web2py book that explains Niphlod's >>>> way to building a query? >>>> >>>> Near the bottom of this >>>> thread<https://groups.google.com/forum/?fromgroups=#!topic/web2py/qL1DKqeEFkA> >>>> there >>>> is: >>>> >>>> all_in_one = db( >>>> (db.products.id == db.product_filter.product_id) & >>>> (db.filters.id == db.product_filter.filter_id) >>>> ) >>>> >>>> Then to get all corresponding rows in product_filter table, >>>> >>>> all_in_one_hoodies = all_in_one(db.filters.name == "hoodie").select() >>>> >>>> I understand his cumbersome example, where you have to select a >>>> resultset and then pass that to another select(). But I don't understand >>>> how I can pass all_in_one() a parameter and how it knows to return all >>>> products which have the "hoodie" filter name. >>>> >>>> >>>> -- --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.

