elocuente - Laravel: atributo del modelo y dónde entre

CorePress2024-01-25  10

¿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

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare