使用模型布尔函数查询的Laravel

时间:2015-03-18 11:48:19

标签: laravel

我有一个简单的模型函数,它返回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;
}

1 个答案:

答案 0 :(得分:1)

您可以使用自定义where语句,如:

public funciton scopeWhereBoxNeeded($query)
{
   return $query->whereRaw('(quantity * packets) > 10');
}