item::random_query() doesn't need to take a "where" clause because

it's returning a query, so the caller can add the where clause
himself.  This makes for a cleaner API.
This commit is contained in:
Bharat Mediratta
2010-06-05 23:47:47 -07:00
parent 87fde3f360
commit 4e56176f35
2 changed files with 2 additions and 5 deletions

View File

@@ -209,17 +209,14 @@ class item_Core {
/**
* Return a query to get a random Item_Model, with optional filters
*
* @param array (optional) where tuple
*/
static function random_query($where=null) {
static function random_query() {
// Pick a random number and find the item that's got nearest smaller number.
// This approach works best when the random numbers in the system are roughly evenly
// distributed so this is going to be more efficient with larger data sets.
return ORM::factory("item")
->viewable()
->where("rand_key", "<", ((float)mt_rand()) / (float)mt_getrandmax())
->merge_where($where)
->order_by("rand_key", "DESC");
}
}

View File

@@ -31,7 +31,7 @@ class image_block_block_Core {
// @todo Consider another fallback if further optimizations are necessary.
$attempts = 0;
do {
$item = item::random_query(array(array("type", "!=", "album")))->find_all(1)->current();
$item = item::random_query()->where("type", "!=", "album")->find_all(1)->current();
} while (!$item && $attempts++ < 3);
if ($item && $item->loaded()) {
$block = new Block();