¿Me falta algo pero esto no funciona? Tengo el atributo de modelo getEntryEndingAttribute así
public function getEntryEndingAttribute ()
{
if($this->whereBetween('ending', [now(), now()->addDays(1)])) {
return TRUE;
}
return FALSE;
}
Los resultados que obtengo de la depuración son
select count(*) as aggregate from `entries` where `ending` >= '2021-03-27 23:08:25'
Cuando hago lo mismo desde el controlador
$entries = Entry::whereBetween('ending', [now(), now()->addDays(1)])->orderBy('ending', 'ASC')->get();
Los resultados de la depuración son correctos
select count(*) as aggregate from `entries` where `ending` between '2021-03-27 23:10:52' and '2021-03-28 23:10:52'
¿Alguna idea?
Gracias.
------------------------------------
Estás en contextos de objeto y captador, por lo que no tienes que usar WhereBetween.
Además, el nombre de la función no es correcto y debería ser getEndingAttribute. Además, puedes buscar algo como:
public function getEntryEndingAttribute()
{
return $this->ending >= now() && $this->ending <= now()->addDays(1);
}
Respondido
28 de marzo de 2021 a las 0:10
Ameer Dheyaa
Ameer Dheyaa
71
1
1 insignia plateada
4
4 insignias de bronce
1
2
getEndingAttribute reemplazaría la propiedad final, que puede no ser lo que OP quiere
- Anurat Chapanond
28 de marzo de 2021 a las 4:08
------------------------------------
getEntryEndingAttribute devuelve un valor al modelo, no filtra la entrada al recuperarlo.
whereBetween filtra la entrada cuando se selecciona de la base de datos.
Para filtrar necesitas un alcance:
public function scopeEntryEnding($query)
{
return $query->whereBetween('ending', [now(), now()->addDays(1)]);
}
y utilícelo de la siguiente manera:
$entries = Entry::entryEnding()->orderBy('ending', 'ASC')->get();
Respondido
28 de marzo de 2021 a las 6:33
Kongulov
Kongulov
1,166
2
2 insignias de oro
9
9 insignias de plata
19
19 insignias de bronce