2017-06-02 12 views
0

に表示してください。私は、特定の日時にデビューするサイトに取り組んでいます。チュートリアルは、各チュートリアルで設定された日付のすべての生徒に表示されます。しかし、チュートリアルは、各チュートリアルで設定された日時だけでなく、各チュートリアルで設定されているタイムゾーンに基づいてデビューさせてください。例えば、チュートリアルが米国の東部標準時間(EST)の午後8時にデビューする予定の場合、アプリケーションセットタイムゾーンでデビューするのではなく、その時間にデビューする必要があります。チュートリアルの日付と指定したタイムゾーンに基づくチュートリアルを

トリックを行うようなLaravel collection filter()を使用して、以下のコードを書きました。しかし、ページの読み込みに時間がかかり、laravel paginate()を使用できません。 Laravel paginate()を使用して、一度にレコード数を減らす必要があります。 4000以上のチュートリアルがあります。助けてください。

// 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を使用しています。

おかげ

+0

ようなあなたのコントローラに発表されたスコープを使用することができます私は本当にあなたの言語を理解することはできませんが、私はあなたが、私はSID-心@答え –

+0

としてあなたに2提案を与えている助けることができるようだ、どのようにすることができます私は、各チュートリアルで設定されたタイムゾーンをチェックするように統合しますか?今は、今日の日付とpublished_atの日付を比較しているだけです。 Carbon :: now()がpublished_at時刻とタイムゾーンと等しいかどうかをチェックします。 –

答えて

0

は、データテーブルを使用しようとするが、ここでパッケージ yajra/laravel-のDataTable - オラクル であり、あなたが公表試みとして使用する場合は、この のようなさまざまなものが追加API ように、データベースからデータをフィルタリングすることができますお使いのモデルに比べてpublished_at

$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(); 
    } 
あなたのテーブルを定義し210

今、あなたはこの

$tutorials = Tutorial::orderBy('created_at', 'desc')->published()->paginate(5); 
+0

タイムゾーンを統合して、各チュートリアルで設定されているタイムゾーンもチェックする方法を教えてください。今は、今日の日付とpublished_atの日付を比較しているだけです。私たちがしたいのは、published_atが時間とタイムゾーンに基づいてCarbon :: now()よりも大きいかどうかをチェックすることです。 –

+0

その仕事の自動炭素クラスこのハンドル –

+0

各チュートリアルのタイムゾーンフィールドはpublished_at日付フィールドとは異なります。それが私が求めている理由です。 –

関連する問題