Sequelize를 사용하여 전체 텍스트 검색을 수행해야하지만 INTEGER 또는 DATE 열과 함께 iLike를 사용해야하는 경우 where 절에서 문자열을 보낼 수 없습니다. 열을 캐스팅하려면 어떻게해야합니까?
내가 원하는 Postgresql 쿼리의 예 :
SELECT "Proposta".id, "Proposta".id_segurado, "Proposta".data_implantacao, "Proposta".data_assinatura, "Proposta".status, "Proposta".numero_proposta,
"Segurado".documento, "Segurado".nome,
p1.id, p1.nome, p1.codigo, p1.documento, p2.id,
p2.nome, p2.codigo, p2.documento
FROM "Proposta"
LEFT JOIN "Segurado" ON "Proposta".id_segurado = "Segurado".id
LEFT JOIN "Produtor" p1 ON p1.id = "Proposta".id_produtor1
LEFT JOIN "Produtor" p2 ON p2.id = "Proposta".id_produtor2
WHERE ((p1.codigo = '8002866' OR p2.codigo = '8002866')
AND ("Proposta".status ILIKE '%108297494%' OR "Proposta".numero_proposta ILIKE '%108297494%'
OR CAST("Proposta".data_implantacao AS VARCHAR) ILIKE '%108297494%'
OR CAST("Proposta".data_assinatura AS VARCHAR) ILIKE '%108297494%'))
그리고 이것은 내가 Sequelize로하려고 한 것입니다.
const propostas = await Proposta.findAll({
where: {
[Op.or]: [
{ "$produtor1.codigo$": documento_produtor },
{ "$produtor2.codigo$": documento_produtor },
],
[Op.or]: [
{
status: {
[Op.iLike]: `%${search}%`,
},
},
{
numero_proposta: {
[Op.iLike]: `%${search}%`,
},
},
db.Sequelize.where(
db.Sequelize.cast(
db.Sequelize.col("$produtor1.codigo$", "VARCHAR"),
{ [Op.iLike]: `%${search}%` }
)
),
db.Sequelize.where(
db.Sequelize.cast(
db.Sequelize.col("$produtor2.codigo$", "VARCHAR"),
{ [Op.iLike]: `%${search}%` }
)
),
],
},
include: [
{
model: Segurado,
as: "segurado",
},
{
model: Produtor,
as: "produtor1",
},
{
model: Produtor,
as: "produtor2",
},
]
})
몇 가지 참고 사항 :
1- Cast 함수는 노드 참조로 작동하지 않으므로 $ produtor1.codigo $가 작동하지 않습니다. postgres 참조를 사용해야합니다.이 경우 produtor1.codigo가됩니다.
2- models / index.js에 정의 된 sequelize로 함수를 호출해야합니다.
그래서:
다음과 같이 속편을 호출하십시오.
const {sequelize} = require("{path}/models/index.js")
다음과 같이 캐스트 함수를 호출합니다.
sequelize.where(
sequelize.cast(sequelize.col("produtor1.codigo"),"varchar"),
{ [Op.iLike]: `%${search}%` }
)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다