Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Não estou conseguindo pegar um dado pelo created_at

Tenho um projeto em laravel que utiliza o padrão controller-service-repository. No repositório, onde tenho a minha entidade estou tentando buscar o dado pela data comparando com created_at. Mas não está dando certo, eu tentei utilizar o whereDate:

return $this->model->when($data, function($query, $data) {
            return $query->whereDate('created_at', $data);
        });

Mas da o seguinte erro:

"Call to undefined method Jenssegers\\Mongodb\\Query\\Builder::compileWhereDate()",

Tentei utilizar apenas o where, até passei o valor de um created_at que tem em um dos meus dados no mongo, mas ele não busca ainda.

return $this->model->when($data, function($query, $data) {
            return $query->where('created_at', $data);
        });
2 respostas

Olá Raiany, tudo bem?

Você poderia verificar como esta armazenada a data na variável $datee como esta armazenada a data no seu banco de dados, pois os objetos DateTime serão convertidos internamente em objetos MongoDate quando salvos no banco de dados. Você poderia utilizar o Carbon, que é uma biblioteca que trabalha com datas, caso você ainda não esteja utilizando.

Espero ter ajudado!

solução!

Olá, Danielle. Tudo e com você?

Obrigada pela ajuda, seu comentário me ajudou a entender melhor o meu problema e consegui resolvê-lo. Deixarei minha solução abaixo para caso alguém tenha alguma dúvida semelhante.

Importações necessárias:

use MongoDB\BSON\UTCDatetime;
use Carbon\Carbon;

Primeiramente, eu pego meu atributo $data e o converto em milissegundos

$dataDe_milissegundos = Carbon::createFromDate($dataDe)->timestamp;
$dataA_milissegundos = Carbon::createFromDate($dataA)->timestamp;

$entreDatas = [
                "dataDe" => $dataDe_milissegundos,
                "dataA" => $dataA_milissegundos
            ];

Em seguida eu utilizo o \MongoDB\BSON\UTCDateTime para ficar no mesmo formato e passo os novos atributos de dateDe e dataA na minha query para ser feito a busca:

$dataDe = new \MongoDB\BSON\UTCDateTime($entreDatas['dataDe']*1000);
$dataA = new \MongoDB\BSON\UTCDateTime(($entreDatas['dataA']+86399)*1000);

return $query->whereBetween('created_at', array($dataDe, $dataA));