【问题标题】:Laravel 5 and Eloquent between two dates from database数据库中两个日期之间的 Laravel 5 和 Eloquent
【发布时间】:2016-12-12 12:58:43
【问题描述】:

我是 Laravel 5 的初学者。我有一个表:用户列有 CreateDate、Type 和 Channel。

我有一个用户列表,我在视图中选择:Trans StartDate、Trans EndDate、Type 和 Channel。

我想显示:Tras StartDate < CreateDate < Trans EndDate 带有类型和频道。 name="time_start", "time_end", "type", "channel".

我的路线:

Route::post('user', 'CSKHController@index');

我的控制器:

public function index() {

    $start = Input::get ( 'time_start' );
    $end = Input::get ( 'time_end' );      

    $articles = KhachHang::all()->whereBetween('CreateDate', [$start, $end])->get();

    return view('admin/layouts/test', compact('stt','article'))->withDetails($articles);

}

请帮帮我!

【问题讨论】:

  • 你的问题是什么?请更具体地向我们展示您的问题所在以及您为解决问题所做的工作。
  • 我想显示数据如下: Tras StartDate
  • 什么是KhachHang?这个模型有CreateDate 属性吗?
  • 我有模型 KhachHang: class KhachHang extends Model { protected $table = 'users';

标签: php laravel laravel-5


【解决方案1】:

Laravel 5.*

这是我如何在 laravel 5.6 项目中使用 eloquent 的示例。

my-view.blade.php

简化的html表单:

<form action="my-route" method="POST">

    {{ csrf_field() }}

    <input type="date" name="from">

    <input type="date" name="to">

    <button type="submit">Submit</button>

</form>

MyController.php

use Illuminate\Support\Carbon;

// ...

$request->validate([

    'from'        => 'required|date',
    'to'          => 'required|date',
]);

$from    = Carbon::parse($request->from)
                 ->startOfDay()        // 2018-09-29 00:00:00.000000
                 ->toDateTimeString(); // 2018-09-29 00:00:00

$to      = Carbon::parse($request->to)
                 ->endOfDay()          // 2018-09-29 23:59:59.000000
                 ->toDateTimeString(); // 2018-09-29 23:59:59

$models  = Model::whereBetween('created_at', [$from, $to])->get();

// do whatever you want with the query results...

其他资源

Date range with whereBetween

Converting a carbon date to mysql timestamp

【讨论】:

    【解决方案2】:

    要在两个日期之间进行检查,您可以使用这个(以及其他选项):

    $articles = KhachHang::where('CreateDate', '>=', $start)
                         ->where('CreateDate', '<=', $end)->get();
    

    您必须确保日期格式为“Y-m-d”,否则代码将不起作用。

    【讨论】:

    • 应该使用whereBetween()。这就是它存在的全部原因。
    • @jonlink 当我收集条件时我不能混合wherewhereBetween (name like 'hello' and date between '2018-01-01' and '2018-03-01')
    • @flaschenpost 确定你可以 :) 我一直都在做这样的事情。我不确定你在做什么的细节,你试图完成什么,什么不起作用,但你绝对可以使用 whereBetween()where()
    • @flaschenpost ex。 MyClass::whereBetween('created_at', [$start, $end])-&gt;where('name', 'LIKE', '%hello%')-&gt;toSql() 产量:"select * from my_class where created_at between ? and ? and name LIKE ?",这是我期望得到的。所以如果我这样做:MyClass::whereBetween('created_at', [$start, $end])-&gt;where('name', 'LIKE', '%hello%')-&gt;get() 会返回预期的结果。
    • 谢谢,确实如此。但我无法将它与if 混合使用。我有它像'if (...name...){$co[] = [name,=,$n;]} if (...date...){ $co[] = [ .. .date ...];}` 然后将 $co 放入 where() 中。但你是对的,似乎有一种方法可以将它与 if() 链接起来。
    【解决方案3】:

    老问题,但答案不是很好。使用whereBetween(),它至少从 5.0 开始就存在了 docs

    $articles = KhachHang::whereBetween('CreateDate', [$start, $end])->get();

    【讨论】:

      【解决方案4】:

      只需将其添加到您的 Eloquent 查询中即可。

      -&gt;whereBetween('your_field', [$from, $to])-&gt;get();

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-03
        • 1970-01-01
        • 2015-12-31
        • 2013-10-19
        • 1970-01-01
        • 2020-01-01
        • 2016-01-26
        • 2016-08-26
        相关资源
        最近更新 更多