1
resposta

Query

Boa tarde,

Nessa query:

(defn todos-os-produtos-por-slug [db slug]
        (d/q '[:find ?entidade
            :in $ ?slug-a-ser-buscado
            :where [?entidade :produto/slug ?slug-a-ser-buscado]] db slug))

Quando passo os parametros de db e o slug é porque estou passando na função ou não sou obrigada a passar todos os parametros além do db?

Exemplo:

Query:

(defn todos-os-produtos-por-slug [db slug]
        (d/q '[:find ?entidade
            :in $ ?slug-a-ser-buscado
            :where [?entidade :produto/slug ?slug-a-ser-buscado ?nome-produto]] db slug produto))

Posso usar dessa forma sem passar a variável ?nome-produto? Se não, posso, poderia explicar o porquê.

Obs.: estou perguntando, porque não estou conseguindo executar as queries por causa de um erro que está na primeira etapa do curso.

Obrigada

1 resposta

Olá Natasha, tudo bem?

Na primeira query, você está passando dois parâmetros: db (que representa o banco de dados) e slug (que é o valor que você está buscando). A parte :in $ ?slug-a-ser-buscado indica que a query está esperando dois valores de entrada: o banco de dados (representado por $) e o valor do slug (representado por ?slug-a-ser-buscado).

Já no código que sugerido, você introduziu ?nome-produto na cláusula :where sem declará-lo na cláusula :in. Com isso, a query está esperando que ?nome-produto seja um valor conhecido, mas você não está passando esse valor como um parâmetro de entrada. Por isso, a query não funcionaria corretamente, pois ?nome-produto não está definido.

Se você deseja usar ?nome-produto como um critério de busca adicional, você precisaria incluí-lo na cláusula :in e passá-lo como um argumento na chamada da função.

Espero ter ajudado.

Qualquer dúvida, não hesite em compartilhar no fórum.

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado