CakePHP 2.0 - 不包含模型的可包含行为

时间:2012-11-02 22:26:46

标签: cakephp cakephp-2.0

*编辑/ UPDATE *

我找到了一个解决方案,但不知道为什么会这样。如果有人能回答为什么这会很棒。

我发现当我将“floorplan_id”添加到MoveInHome的字段列表中时,MediaFloorplan会显示在我的数据中,因为MoveInHome有多个楼层平面图。奇怪,因为“id”在包含的“Floorplan”

的字段中找到

* END EDIT / UPDATE *

我正在为一个家庭建设者开发一个项目,并且在通过可包含的内容获取一些数据时遇到了问题。

App模型有这个:

public $actsAs = array("Containable");

我正在从FloorplansController调用MoveInHome模型

$this->loadModel("MoveInHome");
$moveInReadyData = $this->MoveInHome->getByCommunity($communityid,4);

MoveInHome belongsTo Floorplan

Floorplan hasMany MediaFloorplan

以下是模型中的功能:

public function getByCommunity($id,$limit=4) {

        $params = array(
            "fields" => array(
                "address",
                "city",
                "state",
            ),
            "conditions" => array(
                "MoveInHome.community_id" => $id,
                "MoveInHome.active" => 1,
                "MoveInHome.sold" => 0
            ),
            "limit" => $limit,
            "order" => "RAND()",
            "contain" => array(
                "MediaMoveInHome" => array(
                    "order" => array(
                        "featured" => "DESC"
                    ),
                    "fields" => array(
                        "media_move_in_home_file_path",
                    ),
                    "limit" => 1,
                ),
                "Floorplan" => array(
                    "fields" => array(
                        "id",
                        "name",
                        "style",
                        "bedrooms",
                        "bathrooms",
                        "sf_bsmt",
                        "sf_1flr",
                        "sf_2flr"
                    ),
                    "MediaFloorplan" => array(
                        "conditions" => array(
                            "MediaFloorplan.type" => "main",
                        ),
                        "fields" => array(
                                "id",
                                "media_floorplan_file_path"
                            )
                    )

                )

            )

        );

        return $this->find("all", $params);

    }

除了MediaFloorplan根本没有回来之外,所有数据都恢复正常。请注意,我在网站的其他区域做了类似的包含请求。问题是否源于将FloorplansController的请求发送到MoveInReady并尝试包含Floorplan等?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

当你发现自己,DavidYell在他对这个问题的评论中澄清时,你必须在fields选项中包含外键。 从实际的CakePHP文档:here

  

使用“字段”和“包含”选项时,请注意包含查询直接或间接要求的所有外键。另请注意,因为Containable必须附加到收容中使用的所有型号,您可以考虑将其附加到您的AppModel。

相关问题