I have a simple model function that returns either true or false, based on some logic that uses a number of columns of the model. So I can't just say where('quantity', '>', 10) or suchlike.
How would I create a where clause that can use this function? I have created a stripped back example of code that might appear in my model's file:
public function scopeWhereBoxNeeded($query)
{
return $query->where(/* - - - - something here! - - - - */);
}
public function boxNeeded()
{
if( $this->packets * $this->quantity > 21) // Potentially much more complex logic here
{
return true;
}
return false;
}
Now, in my controller I'd like to say Products::whereBoxNeeded()->get(). How do I do it?
Sidenote
At present I am returning all the models that match a broader query, then doing
$products = $products->filter(function($product)
{
return $product->boxNeeded();
});
But this is breaking the pagination, as I use {{ $products->links() }} in the view, and I think after filtering the query this is removed.
Edit
The actual query I am doing is much more complicated:
public function boxNeeded()
{
$now = Config::get('next_cut_off')->copy();
$now->subMonths($this->month_joined);
if(($now->month + 12 + $this->subscription_frequency) % $this->subscription_frequency == 0)
return true;
return false;
}