请帮助。我在特定日期和时间首次亮相的网站上工作。每个教程设置的日期,向每个学生展示教程。但是,我希望这些教程不仅在每个教程上设置的日期和时间之前首次亮相,而且还基于每个教程上的时区设置。例如,如果将一个教程定于今天下午8:00在美国东部标准时间(EST(首次亮相,则该教程应当时首次亮相,而不是在申请Set set timeZone上首次亮相。
我使用Laravel Collection Filter((编写了以下代码,该代码似乎可以解决问题。但是,该页面的加载需要更长的时间,我无法使用Laravel Paginate((。我需要使用laravel paginate((一次减少被拉出的记录数量。有四千多个教程。请帮忙。
// upcoming tutorials
$tutorials = Tutorial::orderBy('id', 'desc)->paginate(20);
$futureTuts = $tutorials->filter(function ($value, $key) {
$today = new DateTime('now');
$show_date = new DateTime($value->show_date, new DateTimeZone($value->timezones->name));
return $show_date > $today;
});
$upcoming_tuts = $futureTuts->all();
请围绕此解决方案,以便能够使用laravel默认的paginate((。我相信使用Laravel分页会导致页面加载更快。我正在使用Laravel 5.4。
谢谢
尝试使用DataTable可以从数据库中过滤您的数据为API这是软件包yajra/laravel-datables-Oracle如果您想用作发布的话,请尝试以下不同添加一列作为已发布的
添加 $table->dateTime('published_at');
比您的模型定义表
protected $dates = ['published_at'];
public function setPublishedAtAttribute($date){
$this->attributes['published_at'] = Carbon::createFromFormat('Y-m-d', $date);
}
public function scopePublished($query)
{
$query->where('published_at', '<=', Carbon::now());
}
public function scopeUnpublished($query)
{
$query->where('published_at', '>', Carbon::now());
}
public function getCreatedAtAttribute($date)
{
return $this->asDateTime($date)->toFormattedDateString();
}
现在您可以在控制器中使用此范围
$tutorials = Tutorial::orderBy('created_at', 'desc')->published()->paginate(5);