20:57
0
Q: Fechas laravel 11 en consulta

MiguecadizMuy buenas, Intento sacar una fechas de una tabla apara luego ver si otra fecha está entre la colección recibida de la BD: public function __invoke(Business $business, int $year, int $month, int $day) { $endDate = now()->setDate($year,$month,$day+ $business->max_future_days)->format('...

hola, haaaa pero si tienes un objeto tipo Slot eso jamás será igual a un string y menos dará true ...
deberías usar: $slots->contains('slot_date', $date); chequea y me dices si te funciona ...
tambien creo que puedes usar pluck: $slots->pluck('slot_date')->contains($date);
me dices cual te sirve ...
Hola. No entiendo qué sentido tiene aquí el uso de contains. ¿Acaso no usas $date como criterio para la consulta? Lo lógico sería que si la consulta no arroja ninguna fila entonces $date no está en los resultados ... Aunque la cosa es confusa, porque usas un rango de fechas en los criterios.
@A.Cedano el uso es correcto por ejemplo si el rango es del 1 a 15 ... y hay registros pero para el dia 11 no hay registros, si $date es 11 deberia devolver false ... pero como dices $date no debería formar parte de la consulta para que esta condición sea lógicamente viable ...
Hola, slot_date son los dias que un negocio está abierto. Desde una vista llamo al controlador pasándole el negocio y la fecha actual: <a href="{{ route('slots.show',['business'=>$business, 'year'=>now()->year, 'month'=>now()->month, 'day'=>now()->day]) }}"> Lo que quiero hacer en el controlador es controlar que en la url nadie pueda meter una fecha a mano y que esta no esté entre las que el negocio no está abierto., Intento ver los días que el negocio está abierto y compararlo con la fecha que se le pasa al controlador. Las fechas se generan con un command de Laravel cada cierto tiempo
@FranciscoIALover Los metodos anteriores que señalaste no funcionan. Imagino que solo con consultas ya me llegaría pero soy novato con eloquent
como que no funcionan??? que sale algun error???
20:57
@Miguecadiz Déjame ver si entendí bien quieres comparar las fechas que se generan con el timestamps con los días con los que el negocio esta abierto? o me confundo de función porque dices que las fechas se generan de forma automatica pero es por el propio sistema de laravel con el timestamps o es uno aparte tuyo?
Buenas, partiendo de que los datos están en la BD (Haciendo una consulta SQL normal): [{"slot_date":"2025-02-10"},{"slot_date":"2025-02-11"},{"slo‌​t_date":"2025-02-12"‌​},{"slot_date":"2025‌​-02-13"},{"slot_date‌​":"2025-02-14"},{"sl‌​ot_date":"2025-02-15‌​"},{"slot_date":"202‌​5-02-17"}] y el tipo de dato es este: {"Field":"slot_date","Type":"date" de verdad que no se como lo primero que puse no funciona. El campo es creado por mi
Lo primero que puse devuelve los datos pero luego me dice que la fecha no está entre esos dato y si lo está
vuelvo y repito, estas comparando un string vs un objeto... esto siempre dara falsa ... no hay manera de que de true como lo estas haciendo ... tiene que hacer otro tipo de comparaciones...
Intento modificando el script y has esto: pastebin.com/vWN71peZ
esta raro porque lo que te puso @Francisco IA Lover esta bien solo se tiene que agregar el 'slot_date' return $slots->contains($date); por return $slots->contains('slot_date', $date);, porque en si tratas de mandar un modelo completo cuando $date es una cadena, entonces tu problema es mucho antes de mandar a llamar el $date, porque aqui ya esta diciendo que $slots tiene el valor de $date en el campo slot_date
el problema es que no tiene cuando publicar que error le sale ... es de los usuarios que no cooperan ... voto por cerrar esta publicación por ser irreproducible y falta de informacion...
pero es que la base de datos no tiene nada que ver en si es desde el Slot por eso digo que es desde antes porque Slot son para objetos completo y no cadenas como quiere hacerlo en el contains
y si mejor que ponga el error completo si vemos que no lo pone o no es un error muy especifico o inactividad votamos por cerrarlo
se me hace raro que el $slots->contains('slot_date', $date); no funcione
bueno votas tu porque yo no puedo xdxd
21:13
@KarlosLuengas Pero es fácil entender eso @KarlosLuengas
Contains retorna valores booleanos, true y false. En cambio el contains('key', 'value') funciona solo cuando la colección contiene arrays asociativos, no objetos de modelos Eloquent, como el Slots
En resumen, estás intentando buscar una clave en un objeto, no en un array
22:14
@FranciscoIALover @FranciscoIALover Eso si funciona. Solo cambiando:
$exists = Slot::where('business_id', $business->id)
->where('slot_date', $date)
->exists();
El where por el WhereDateDat
haaa ok
Listo
gracias
ya te lo agregue como respuesta, sigue asi vaz bien