简体   繁体   中英

Laravel - select rows from previous week on monday

I have a table mdl_forum_posts with a field created that's a BIGINT (database is not mine, so don't blame for the type of field). An example of value is 1504170577 . The value is saved as a timestamp.

There will run a cron every Monday (first day of the week) that needs to select all the rows created in the previous week (created value in week before).

I'm trying to do this:

$currentDate = \Carbon\Carbon::now();
$agoDate = $currentDate->subDays($currentDate->dayOfWeek)->subWeek();

$postsNL = DB::table('mdl_forum_posts')->whereBetween('created', array($agoDate,$currentDate))->get();

But this isn't returning any rows (and it should!).

Keep in mind that when you do some operations on a Carbon object it will modify the instance of the object itself, so basically when you run the statement

$agoDate = $currentDate->subDays($currentDate->dayOfWeek)->subWeek();

you are also modifying $currentDate .

The below code should do the trick:

$currentDate = \Carbon\Carbon::now();
$agoDate = $currentDate->copy()->subDays($currentDate->dayOfWeek)->subWeek()->setTime(23, 59, 59);

$postsNL = DB::table('mdl_forum_posts')
      ->whereBetween('created', array($agoDate->timestamp, $currentDate->timestamp))
      ->get();

The copy method will make all the modifications on a copy of the Carbon instance, not affetting the original one.

Hope it helps

Why should it? MySQL won't just compare an integer to a date. The integers are called unix timestamps and you can easily get unix timestamps out of Carbon by using the timestamp property on a Carbon instance:

$postsNL = DB::table('mdl_forum_posts')
      ->whereBetween('created', array($agoDate->timestamp, $currentDate->timestamp))
      ->get();

Since Carbon extends DateTime, you could also use the getTimestamp method.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM