其中在laravel 4中的日期之间雄辩

时间:2014-09-28 05:45:10

标签: php laravel laravel-4 eloquent

我有这样的查询

SELECT * FROM `sp_price` WHERE (`from_date` between '2014-08-15' and '2014-09-18') || (`to_date` between '2014-08-15' and '2014-09-18')

现在我如何在laravel 4中转换此查询。我使用Eloquent

4 个答案:

答案 0 :(得分:13)

DB::table(sp_price)
     ->whereBetween('from_date',array('2014-08-15','2014-08-18'))
     ->orWhereBetween('to_date',array('2014-08-15','2014-08-15'))
     ->get();

也许你可以试试这个

答案 1 :(得分:2)

  $count =  TokenLog::whereBetween(DB::raw('date(created_at)'), [$start_date, $end_date])->get();

答案 2 :(得分:1)

在您的示例中,您同时检查from_dateto_date的相同日期范围...如果总是这样,您可以使此查询更加“雄辩” “:

SpPrice.php 模型中:

public function getPriceByDate($fromDate, $toDate)
{
    $range = [$fromDate, $toDate];
    return $this
        ->whereBetween('from_date', $range)
        ->orwhereBetween('to_date', $range)
        ->get();
}

然后,从控制器调用此方法:

    $prices = new SpPrice;
    $price = $prices->getPriceByDate('2014-08-15', '2014-09-18');

答案 3 :(得分:0)

您可以使用whereRaw()在查询中添加raw where子句,例如:

$results = SpPrice::whereRaw("('2014-08-15' between `from_date` and `to_date`) || ('2014-09-18' between `from_date` and `to_date`)")->get();

或许您可以使用DB::raw()作为whereBetween()的第一个参数,但我不确定是否可能,在这种情况下,您可以使用带有闭包的orWhere()来编写更多可读代码,例如:

SpPrice::whereBetween(DB::raw('"2014-08-15"'), ['from-date', 'to_date'])->orWhere(function($q)
{
    $q->whereBetween(DB::raw('"2014-09-18"'), ['from-date', 'to_date']);
});

但我不确定这是否有效,试一试。