J'essaie de créer une page de rapport qui affiche les rapports d'une date spécifique à une date spécifique. Voici mon code actuel:
$now = date('Y-m-d');
$reservations = Reservation::where('reservation_from', $now)->get();
Ce que cela fait en langage SQL simple est select * from table where reservation_from = $now
.
J'ai cette requête ici mais je ne sais pas comment le convertir en requête éloquente.
SELECT * FROM table WHERE reservation_from BETWEEN '$from' AND '$to
Comment puis-je convertir le code ci-dessus en requête éloquente? Merci d'avance.
La méthode whereBetween
vérifie que la valeur d'une colonne est comprise entre deux valeurs.
$from = date('2018-01-01');
$to = date('2018-05-02');
Reservation::whereBetween('reservation_from', [$from, $to])->get();
Dans certains cas, vous devez ajouter une plage de dates de manière dynamique. Basé sur le commentaire de @ Anovative , vous pouvez le faire:
Reservation::all()->filter(function($item) {
if (Carbon::now->between($item->from, $item->to) {
return $item;
}
});
Si vous souhaitez ajouter d'autres conditions, vous pouvez utiliser orWhereBetween
. Si vous souhaitez exclure un intervalle de dates, vous pouvez utiliser whereNotBetween
.
Reservation::whereBetween('reservation_from', [$from1, $to1])
->orWhereBetween('reservation_to', [$from2, $to2])
->whereNotBetween('reservation_to', [$from3, $to3])
->get();
Autres clauses utiles où: whereIn
, whereNotIn
, whereNull
, whereNotNull
, whereDate
, whereMonth
, whereDay
, whereYear
, whereTime
, whereColumn
, whereExists
, whereRaw
.
Ce qui suit devrait fonctionner:
$now = date('Y-m-d');
$reservations = Reservation::where('reservation_from', '>=', $now)
->where('reservation_from', '<=', $to)
->get();
Une autre option si votre champ est datetime
au lieu de date
(bien que cela fonctionne dans les deux cas):
$fromDate = "2016-10-01";
$toDate = "2016-10-31";
$reservations = Reservation::whereRaw("reservation_from >= ? AND reservation_from <= ?",
array($fromDate." 00:00:00", $toDate." 23:59:59")
)->get();
Essaye ça:
Puisque vous effectuez une récupération basée sur une valeur de colonne unique, vous pouvez également simplifier votre requête:
$reservations = Reservation::whereBetween('reservation_from', array($from, $to))->get();
Récupérer en fonction de la condition: laravel docs
J'espère que cela a aidé.
Si vous voulez vérifier si la date actuelle existe entre deux dates dans la base de données: => ici, la requête obtiendra la liste des applications si la demande de l'employeur à partir de et jusqu'à ce jour existe dans la date du jour.
$list= (new LeaveApplication())
->whereDate('from','<=', $today)
->whereDate('to','>=', $today)
->get();
Je sais que c'est peut-être une vieille question, mais je me suis juste retrouvé dans une situation où je devais implémenter cette fonctionnalité dans une application Laravel 5.7. Ci-dessous est ce qui a fonctionné de moi.
$articles = Articles::where("created_at",">", Carbon::now()->subMonths(3))->get();
Vous devrez également utiliser Carbon
use Carbon\Carbon;
Si vous avez besoin de savoir quand un champ date/heure devrait être comme ceci.
return $this->getModel()->whereBetween('created_at', [$dateStart." 00:00:00",$dateEnd." 23:59:59"])->get();
Et j'ai créé la portée du modèle
En savoir plus sur les portées:
Code:
/**
* Scope a query to only include the last n days records
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeWhereDateBetween($query,$fieldName,$fromDate,$todate)
{
return $query->whereDate($fieldName,'>=',$fromDate)->whereDate($fieldName,'<=',$todate);
}
Et dans le contrôleur, ajoutez la bibliothèque de carbone en haut
use Carbon\Carbon;
OU
use Illuminate\Support\Carbon;
Pour obtenir l'enregistrement des 10 derniers jours à partir de maintenant
$lastTenDaysRecord = ModelName::whereDateBetween('created_at',(new Carbon)->subDays(10)->toDateString(),(new Carbon)->now()->toDateString() )->get();
Pour obtenir l'enregistrement des 30 derniers jours à partir de maintenant
$lastTenDaysRecord = ModelName::whereDateBetween('created_at',(new Carbon)->subDays(30)->toDateString(),(new Carbon)->now()->toDateString() )->get();