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 SQL brut est select * from table where reservation_from = $now
.
J'ai cette requête ici mais je ne sais pas comment la 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.
reservation_from
. vous pouvez utiliser les valeurs de carbone basées sur cela.Reservation::where('reservation_from', '>=', Carbon::createFromDate(1975, 5, 21);) ->where('reservation_from', '<=', Carbon::createFromDate(2015, 5, 21);)->get()
,;Réponses:
La
whereBetween
méthode vérifie que la valeur d'une colonne est comprise entre deux valeurs.Dans certains cas, vous devez ajouter une plage de dates de manière dynamique. Basé sur le commentaire de @Anovative , vous pouvez faire ceci:
Si vous souhaitez ajouter plus de conditions, vous pouvez utiliser
orWhereBetween
. Si vous souhaitez exclure un intervalle de dates, vous pouvez utiliserwhereNotBetween
.D' autres clauses utiles où:
whereIn
,whereNotIn
,whereNull
,whereNotNull
,whereDate
,whereMonth
,whereDay
,whereYear
,whereTime
,whereColumn
,whereExists
,whereRaw
.Laravel docs sur les clauses Where.
la source
$from
et$to
étaient des dates dynamiques appartenant au modèle? Comme dans il y a uneffective_at
et desexpires_at
champs et je veux interroger pour voir si l'élément actuel est dans cette plage. J'ai essayéeach()
avec un if qui utiliseCarbon::now()->between( ... )
, mais il renvoie toujours tous les résultats.filter()
, cela a fait l'affaire.MyModel::all()->where('column', 'value')->filter(function ($item) { if (Carbon::now->between($item->effective_at, $item->expires_at)) { return $item; } })->first();
Une autre option si votre champ est
datetime
au lieu dedate
( bien que cela fonctionne dans les deux cas ):la source
Les éléments suivants devraient fonctionner:
la source
Si vous voulez vérifier si la date actuelle existe entre deux dates dans db: => ici la requête obtiendra la liste des candidatures si la candidature de l'employé à partir de et à la date existe à la date d'aujourd'hui.
la source
Essaye ça:
Étant donné que vous récupérez en fonction d'une seule valeur de colonne, vous pouvez simplifier votre requête de la même manière:
Récupérer en fonction de la condition: documentation laravel
J'espère que cela a aidé.
la source
Et j'ai créé la portée du modèle
En savoir plus sur les portées:
https://laravel.com/docs/5.8/eloquent#query-scopes
https://medium.com/@janaksan_/using-scope-with-laravel-7c80dd6a2c3d
Code:
Et dans le contrôleur, ajoutez la bibliothèque Carbon en haut
OU
Pour obtenir le record des 10 derniers jours à partir de maintenant
Pour obtenir le record des 30 derniers jours à partir de maintenant
la source
Si vous avez besoin de savoir quand un champ datetime doit être comme ça.
la source
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. Voici ce qui a fonctionné de moi.
Vous devrez également utiliser du carbone
la source