使用Model在表之间建立内部联接

时间:2015-02-17 03:16:40

标签: mysql coldfusion cfwheels

我尝试在两个表之间建立关系,文章类别。这是一对一的关系articles.category_id = categories.id。我有以下设置。

控制器/ home.cfc

<cfcomponent extends="Controller">

    <cffunction name="index">

        <cfset qFeaturedArticles = model("articles").findAll(
            where="show_homepage = 1",
            include="categories",
            order="homepage_order"
        ) />

    </cffunction>

</cfcomponent>

模型/ categories.cfc

<cfcomponent extends="Model">

    <cffunction name="init">
        <cfset hasOne("articles", foreignKey="category_id") />
    </cffunction>

</cfcomponent>

模型/ articles.cfc

<cfcomponent extends="Model">

   <cffunction name="init">
    <cfset belongsTo("categories", dependent="nullify") />
</cffunction>

</cfcomponent>

这是我得到的错误。

在第49行的第4行找到无效的CFML构造.ColdFusion正在查看以下文字:

=

CFML编译器正在处理:

  • 以第4行第16行的belongsTo开头的表达式。此消息通常是由于表达式结构。
  • 从第4行第10列开始的cfset标记。
  • 从第4行开始的cfset标记,第10栏。
包含或处理的特定文件序列是:\ cfusion \ wwwroot \ foo \ index.cfm,line:4

< / p>

1 个答案:

答案 0 :(得分:4)

首先,我想指出categories.cfc模型。如果您指定hasOne关系,那么在这种情况下,代码应如下所示:

<cfset hasOne("article", foreignKey="category_id") />

请注意,articles代替articlehasOne需要one to many

但是,从字面上讲,类别和文章之间的关系应该是<cfcomponent extends="Model"> <cffunction name="init"> <cfset hasMany("articles", foreignKey="category_id") /> </cffunction> 。我的意思是一个类别可以有很多文章。

所以categories.cfc应该写成如下:

{{1}}