Laravel 5.2使用foreach循环获取日期差

时间:2019-06-10 00:03:56

标签: php laravel-5 indexing eloquent undefined

我正在尝试使用查询生成器获取查询数据的date_diff,但是我无法传递'create_at'值来计算天差。有任何想法吗?谢谢。

{{1}}

数据库

{{1}}

4 个答案:

答案 0 :(得分:2)

实际上是通过使用以下代码:

$trialusers=Staff::all('id','email','created_at','trial')->where('trial',1);

$ trialusers变量将是Staff模型的集合。因此,您无法访问$ trialusers ['created_at']之类的数组键。

您要么必须执行foreach循环,要么获取集合的第一个模型。此示例使用first()方法。

public function index()
{
    $now = Carbon::now();
    $trialusers = Staff::all('id','email','created_at','trial')->where('trial',1);

    $trialuser = $trialusers->first();
    if ($trialuser) {
        return $now->diffInDays($trialuser->created_at);
    }

    // do whatever needs to be done when no trial user exists.
    return null;

}

答案 1 :(得分:1)

我建议您更好地使用Carbon库:因此您的代码应如下所示:

    <?php

    namespace App\Http\Controllers;

    use Illuminate\Http\Request;
    use App\Http\Requests;
    use App\Staff;
    use Carbon\Carbon;
    class StaffController extends Controller
    {
        public function index()
        {
            $currentdate = Carbon::create();
            $trialusers=Staff::all('id','email','created_at','trial')->where('trial',1);
            $date = $trialusers->created_at;
            $datediff = $date->diffInDays($currentdate);
            return $datediff;
        }
    }

答案 2 :(得分:0)

我已经解决了我的问题。首先,我使用 trial = 1 的条件循环数据。其次是验证 create_at 的日期,并与今天的日期进行N天的比较。最后,我做了一个条件,可以按N天(差异6天和差异7天)过滤数据,然后将其存储在数组中。我将使用这些 $ trialuser6 $ trialuser7 变量创建电子邮件通知功能。

谢谢,我真的很感谢所有的想法和建议。

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Mail;
use App\User;

class checkTrial extends Command
{


    public function checkTrialUser()
    {
        $trialuser6 = [];
        $trialuser7 = [];
        foreach (User::all()->where('trial', 1) as $value) {
            $differtrial = !$this->validateDate($value['created_at']) ? 0 : (int) date_diff(date_create($value['created_at']), date_create(date('Y-m-d')))->format('%a');
            $differtrial == 6 ? array_push($trialuser6, $value) : ($differtrial == 7 ? array_push($trialuser7, $value) : null);
        }
    }

}

我的验证功能。

    public function validateDate($date)
    {
        return (bool) strtotime($date);
    }

答案 3 :(得分:0)

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Staff;
use Carbon\Carbon;
class StaffController extends Controller
{
    public function index()
    {
        $currentdate = Carbon::create();
        $trialusers=Staff::all('id','email','created_at','trial')->where('trial',1)->->first();
        if($trialusers){
            $date = $trialusers->created_at;
            $datediff = $date->diffInDays($currentdate);
            return $datediff;
        }else{
           return null;
        }

    }
}