Выберите самые последние записи ровно за месяц, используя Laravel - PullRequest
0 голосов
/ 15 мая 2019

Я объединяю две (2) таблицы (users и billings) в Laravel.В биллинге пользователь может выставлять счета несколько раз.Таким образом, это означает, что имя пользователя может появляться несколько раз.Я хочу выбрать самые последние записи счетов на основе created_at (дата) и выбрать имя пользователя и created_at.

Я создал запрос на выборку в Laravel.

$monthlysubscriptionupdate = DB::table("billings")
    ->select("billings.phone", "billings.email", "billings.plan", 
        "billings.created_at", "users.username",
        "users.msisdn", "users.auto_subscription")
    ->join("users", "users.username", "=", "billings.username")
    ->where(['users.package_id' => '1102', 'users.auto_subscription' => 0])
    ->get(); 

В таблице счетов пользователю может быть выставлен счет несколько раз.Таким образом, это означает, что имя пользователя может появляться несколько раз.Я хочу выбрать самые последние записи счетов на основе created_at (дата) и выбрать имя пользователя и created_at для имени пользователя ровно через месяц между текущей датой и created_at.Обратите внимание, что каждое имя пользователя появляется несколько раз.

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Вы можете использовать whereDate + orderBy, как сказал Даниэль Луна.Пример whereDate

$q->whereDate('created_at', '=', date('Y-m-d'));

В любом случае, если вы используете этот тип структуры БД, где вам нужно иметь дело со сложными запросами, я настоятельно рекомендую вам использовать Eloquent и объектно-ориентированную структуру вашего проекта.Таким образом, вы сможете избежать запросов до тех пор, пока параграф ^ _ ^, как этот.

0 голосов
/ 15 мая 2019

Вы можете попробовать это для получения данных текущего месяца:

$currentMonth = date('m');
$monthlysubscriptionupdate =  DB::table("billings")
        ->select("billings.phone","billings.email","billings.plan","billings.created_at","users.username", "users.msisdn", "users.auto_subscription")
       ->join("users","users.username","=","billings.username")
       ->where(['users.package_id'=>'1102', 'users.auto_subscription'=>0])
      ->whereRaw('MONTH(billings.created_at) = ?',[$currentMonth])
       ->orderBy("billings.created_at", "desc")
       ->get(); 

Или, если вы хотите получить последние 30 дней, попробуйте это:

$date = \Carbon\Carbon::today()->subDays(30);
DB::table("billings")
        ->select("billings.phone","billings.email","billings.plan","billings.created_at","users.username", "users.msisdn", "users.auto_subscription")
       ->join("users","users.username","=","billings.username")
       ->where(['users.package_id'=>'1102', 'users.auto_subscription'=>0])
       ->where('billings.created_at', '>=',$date)
       ->orderBy("billings.created_at", "desc")
       ->get(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...