Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从数据库检索、计算并发布到视图_Php_Laravel - Fatal编程技术网

Php 从数据库检索、计算并发布到视图

Php 从数据库检索、计算并发布到视图,php,laravel,Php,Laravel,我想计算两个日期之间的差异,并将结果发布到视图中。该表包含以下行: Id、AuthorId、duedate、body 我知道如何计算两个日期之间的差异,但这只适用于一行。现在,我正在从数据库中提取多行,根据laravel的说法,我不应该在视图中执行任何计算 以下是来自控制器的信息: public function index() { // $posts = Post::all(); $to = \Carbon\Carbon::now(); $from = \C

我想计算两个日期之间的差异,并将结果发布到视图中。该表包含以下行:

Id、AuthorId、duedate、body

我知道如何计算两个日期之间的差异,但这只适用于一行。现在,我正在从数据库中提取多行,根据laravel的说法,我不应该在视图中执行任何计算

以下是来自控制器的信息:

 public function index()
{
    //

    $posts = Post::all();
    $to = \Carbon\Carbon::now();
    $from = \Carbon\Carbon::createFromFormat('Y-m-d H:s:i', '2015-5-6 9:30:34');

    $diff_in_days = $to->diffInDays($from);

    return view('blog.index',['posts'=>$posts,'diffdays'=>$diff_in_days]);
}
public function index()
{
    $posts = Post::all();
    return view('blog.index', compact('posts'));
}
我只是为$from变量使用了一个虚拟日期。应该用数据库中的到期日期值替换它。我不确定如何接近,以便在将其传递给视图之前在控制器中执行计算。 我仍在学习laravel,任何帮助都会很好。

如果duedate是标准日期时间列,并且如果您已将duedate添加到阵列中:

如果不是,则为日期将自定义日期字符串转换为实例

然后,您可以在视图中执行此操作:

@foreach ($posts as $post)
    {{ $post->duedate->diffInDays() }}
@endforeach
@foreach ($posts as $post)
    {{ $post->duedate->diffForHumans() }}
@endforeach
如果duedate是标准日期时间列,并且您已将duedate添加到模型中的$dates数组中:

受保护的$dates=['duedate']

现在,duedate被强制转换为时间戳,因此您可以在此变量上使用Carbon\Carbon方法

让我们看看您在控制器中需要什么:

 public function index()
{
    //

    $posts = Post::all();
    $to = \Carbon\Carbon::now();
    $from = \Carbon\Carbon::createFromFormat('Y-m-d H:s:i', '2015-5-6 9:30:34');

    $diff_in_days = $to->diffInDays($from);

    return view('blog.index',['posts'=>$posts,'diffdays'=>$diff_in_days]);
}
public function index()
{
    $posts = Post::all();
    return view('blog.index', compact('posts'));
}
然后,您可以在视图中执行此操作:

@foreach ($posts as $post)
    {{ $post->duedate->diffInDays() }}
@endforeach
@foreach ($posts as $post)
    {{ $post->duedate->diffForHumans() }}
@endforeach
在artisan tinker中测试:

天数:

工作时间:

>>> $now = Carbon\Carbon::now()->addDay()
=> Carbon\Carbon @1519827379 {#811
     date: 2018-02-28 15:16:19.447731 Europe/Budapest (+01:00),
   }
>>> $now->diffForHumans();
=> "23 hours from now"

是否要计算创建帖子的时间?例如“3天前”?如果数据来自数据库,则使用例如DATEDIFF向结果中添加一列可能更容易获得两个日期之间的天数差。@jeroen我曾考虑过这样做,但这意味着我需要在每次通过时自动更新该列。这是最佳实践吗?你不应该计算这个。碳可以很容易地为你做到这一点。让我写一个答案,你应该只存储到期日,在例如mysql中,你可以选择*,DATEDIFF'due\u date',现在作为days\u due FROM。。。。与使用PHP相比,使用PHP更容易,而且可能效率更高。因此,您不需要更新数据库,而是在选择数据时进行计算。是的,duedate是标准的dateTime列,但我没有将其添加到日期中。因为我从数据库中检索了一堆行,我将如何将duedate添加到$dates数组?@user1783675如果您将其添加到模型中的数组中,则duedate属性将由Laravel自动转换为Carbon实例。默认情况下,Laravel对创建的和更新的列执行相同的操作。