Laravel 使用日期范围列过滤日期范围

时间:2021-02-07 21:21:31

标签: laravel eloquent

如果所选日期 ($postFr, $postTo) 在定义的时间段内,我想列出相关产品。那么我可以像下面的例子那样做吗?

示例:

$q->whereBetween('start_date', array($postFr, $postTo));
$q->orWhereBetween('end_date', array($postFr, $postTo));

//Could there be a similar use like this???;

$q->whereBetween(array(start_date, end_date), $postFr);
$q->orWhereBetween(array(start_date, end_date), $postTo);

详细说明:

我有一个这样的周期表

periods

|  id  |  start_date  |  end_date  | product_id |   
|------|--------------|------------|------------|
|  1   | 2021-02-19   | 2021-03-21 |  1         |   
|  2   | 2021-02-19   | 2021-03-21 |  2         |   
|  3   | 2021-02-19   | 2021-03-21 |  3         |   
|  4   | 2021-02-19   | 2021-03-21 |  2         |   

我有一个这样的产品表

products

|   id  |   name    |
|-------|-----------|
|   1   |   pro1    |
|   2   |   pro2    |
|   3   |   pro3    |

我的模型页面相关代码如下

public $belongsTo = [
        'relationPeriod' => [
            'Model->periods table',
            'key' => 'id',
            'otherKey' => 'product_id',
        ]
 ]
 
 $query->whereHas('relationPeriod', function($q) use ($postFr, $postTo){
     $q->whereBetween('start_date', array($postFr, $postTo]));
     $q->orWhereBetween('end_date', array($postFr, $postTo));
 });

2 个答案:

答案 0 :(得分:1)

有效

$q->whereDate('start_date', '<=', $postFr);
$q->whereDate('end_date', '>=', $postFr);
$q->orWhereDate('start_date', '<=', $postTo);
$q->whereDate('end_date', '>=', $postTo);

答案 1 :(得分:-1)

这会起作用:

$start_date = '2021-01-01';
$end_date = '2021-02-01';
$filter = Atom_juice_data_history::whereBetween('created_at',[$start_date, $end_date])
            ->where('atom_juice_data_id',$product_id)
            ->orderBy('created_at', 'ASC')
            ->get();

这是参考网址 https://medium.com/@sectheater/how-to-use-laravel-wherebetween-method-elegantly-20a50f3b0a2a