2016-12-07 5 views
0

Dialect finden: Postgres
Datenbankversion: @latest
Sequelize Version: @latestmit Modell Verein

Ich versuche, herauszufinden, wie man ein assoziiertes Modell verwenden. Ich habe 3 Modelle: post, postCity und region. Sie haben die folgende Beziehung: postCity (post_id, region_id) assoziieren mit post (post_id) und region (region_id). Ich verwende eine Suchfunktion wie folgt aus:

include: [ 
    { 
     model: models.postCity, 
     include:[{model:models.region}], 
     attributes: [[models.sequelize.fn('count', 'post_id'), 'count']], 
    } 
    ], 
    where: { 
    $or: [ 
     { 
      "create_by" : {$not: 67} 
     }, 
     { 
     // "postCities.region_name":{$iLike: "%Guangazhou2%"} 
     }, 
     { 
      "description":{$iLike: "%India%"} 
     } 
     ] 
    } 

was dazu führt:

SELECT "post"."post_id", "post"."description", "post"."create_by", 
     "post"."create_time", "post"."update_time", "post"."country_id", 
     "postCities"."post_id" AS "postCities.post_id", 
     "postCities"."region_id" AS "postCities.region_id", 
     "postCities"."order_no" AS "postCities.order_no", 
     "postCities.region"."region_id" AS "postCities.region.region_id", 
     "postCities.region"."region_name" AS "postCities.region.region_name", 
     "postCities.region"."country_id" AS "postCities.region.country_id", 
     "postCities.region"."province_id" AS "postCities.region.province_id" 
FROM "t_post" AS "post" 
    LEFT OUTER JOIN "t_post_city" AS "postCities" 
     ON "post"."post_id" = "postCities"."post_id" 
    LEFT OUTER JOIN "t_region" AS "postCities.region" 
     ON "postCities"."region_id" = "postCities.region"."region_id" 
WHERE ("post"."create_by" != 67 OR "post"."description" ILIKE '%India%'); 

Als ich Kommentar- "postCities.region_name":{$iLike: "%Guangazhou2%"} dann bekomme ich diese Fehler

column post.postCities.region_name does not exist 

ich einfach wie zu meiner Anfrage zu so sein

... WHERE ("post"."create_by" != 67 
      OR "post"."description" ILIKE '%India%' 
      OR "postCities.region_name" ILIKE: "%Guangazhou2%") 

Update

Ich habe auch versucht, [{model:models.region, where:{"region_name":{$iLike: "%Guangazhou2%"}}}] einzuschließen, aber das gibt mir nicht das entsprechende Ergebnis.

Antwort

1

Um zu enthalten Tabellen hinzuzufügen Zustand, sollten Sie erhalten mit $ Symbol wickeln, wie es:

include: [{ 
    model: models.postCity, 
    include:[{model:models.region}], 
    attributes: [[models.sequelize.fn('count', 'post_id'), 'count']], 
}], 
where: { 
    $or: [{ 
     "create_by" : {$not: 67} 
    }, { 
     "$postCities.region.region_name$":{$iLike: "%Guangazhou2%"} 
    }, { 
     "description":{$iLike: "%India%"} 
    }] 
}