我有一个简单的模型函数,它返回true或false,基于一些使用模型的多个列的逻辑。所以我不能只说where('quantity', '>', 10)
或类似的。
如何创建可以使用此功能的where子句?我创建了一个可能出现在我的模型文件中的代码的剥离示例:
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;
}
现在,在我的控制器中,我想说Products::whereBoxNeeded()->get()
。我该怎么做?
旁注
目前我正在返回所有匹配更广泛查询的模型,然后执行
$products = $products->filter(function($product)
{
return $product->boxNeeded();
});
但是这打破了分页,因为我在视图中使用{{ $products->links() }}
,我认为在过滤查询后,这将被删除。
我正在做的实际查询要复杂得多:
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;
}
答案 0 :(得分:1)
您可以使用自定义where语句,如:
public funciton scopeWhereBoxNeeded($query)
{
return $query->whereRaw('(quantity * packets) > 10');
}