2
respostas

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

2 respostas

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

Muito obrigada pela resposta. Esclareceu minha dúvida.