Package Data | |
---|---|
Maintainer Username: | rtablada |
Maintainer Contact: | ryan.tablada@gmail.com (Ryan Tablada) |
Package Create Date: | 2013-07-31 |
Package Last Update: | 2013-08-02 |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-11-19 03:08:21 |
Package Statistics | |
---|---|
Total Downloads: | 42 |
Monthly Downloads: | 0 |
Daily Downloads: | 0 |
Total Stars: | 31 |
Total Watchers: | 1 |
Total Forks: | 2 |
Total Open Issues: | 0 |
This package makes rankable models for sorting quick and easy.
Making Rankable Models is just as easy as creating regular Eloquent Models with just one more property protected $metricsWeight
!
An example model would look something like this:
use Rtablada\EloquentRankable\RankableModel;
class Friend extends RankableModel
{
protected $metricWeights = array(
'search' => 0.8,
'name' => 0.2
);
protected $fillable = array('name', 'rank');
}
In your Schema remember to include a rank
column (I suggest using a Decimal fieldtype with a 10 digits and 4 decimals).
$metricWeight
PropertyThe $metricWeight
property is an easy way to modify the ranking property of your models.
You can set weights for whenever you use an updateMetric*
function.
So if you want to update a model's rank when you get a result in a search you could run $model->updateMetricSearch()
which will raise the ranking by 0.8 points.
These updateMetric
functions can also be used in mutators or accessors.
public function setNameAttribute($value)
{
$this->attributes['name'] = $value;
$this->updateMetricName();
}
Any time you want to get results already sorted descending by rank
you can just prepend your wanted query builder function with rank
.
For example:
$friends = Friend::rankAll();
$friendsPaginated = Friend::rankPaginate();
The model also gives you the ability to rankBefore
, rankBetween
, or rankAfter
another model instance.
$friendLow = Friend::find(1);
$friendHigh = Friend::find(1);
$friendLow->rankBefore($friendHigh);
ids
For uses such as Javascript Web Apps, Rankable gives you a quick and easy way to update the rankings between entries.
$desiredIds = array(1,2,3);
$friends = Friend::rankOrderSet($desiredIds);