Laravel 5.2 Получите разницу в дате, используя цикл foreach - PullRequest
0 голосов
/ 10 июня 2019

Я пытаюсь получить date_diff запрашиваемых данных с помощью построителя запросов, но я не могу передать значения 'create_at' для подсчета разницы дней. Есть идеи? Спасибо.


<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Staff;
class StaffController extends Controller
{
    public function index()
    {
        $currentdate = date('Y-m-d  H:i:s');
        $trialusers=Staff::all('id','email','created_at','trial')->where('trial',1);
        $datediff = date_diff($trialusers['created_at'],$currentdate);
        return $datediff;
    }
}


База данных

+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| first_name | varchar(255) | NO   |     | NULL    |                |
| last_name  | varchar(255) | NO   |     | NULL    |                |
| email      | varchar(255) | NO   |     | NULL    |                |
| created_at | timestamp    | YES  |     | NULL    |                |
| updated_at | timestamp    | YES  |     | NULL    |                |
| last_login | timestamp    | YES  |     | NULL    |                |
| trial      | tinyint(4)   | NO   |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

Ответы [ 4 ]

2 голосов
/ 10 июня 2019

На самом деле с помощью этого кода:

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

переменная $ trialusers будет набором моделей Staff. Таким образом, вы не можете получить доступ к ключам массива, таким как $ trialusers ['made_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 голос
/ 10 июня 2019

Я советую вам лучше использовать библиотеку 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;
        }
    }
0 голосов
/ 11 июня 2019

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;
        }

    }
}
0 голосов
/ 11 июня 2019

Я уже решил свою проблему. Сначала я зацикливаю данные с условием, где 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);
    }
...