1

*编辑/更新*

我找到了一个解决方案,但真的不知道为什么会这样。如果有人能回答为什么会这样,那就太好了。

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

*结束编辑/更新*

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

应用模型有这个:

public $actsAs = array("Containable");

我正在从 FloorplansController 调用 MoveInHome 模型

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

MoveInHome 属于楼层平面图

平面图有许多媒体平面图

这是模型中的函数:

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 等?

谢谢您的帮助。

4

1 回答 1

0

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

当使用 'fields' 和 'contain' 选项时 - 小心包含您的查询直接或间接需要的所有外键。还请注意,因为 Containable 必须附加到容器中使用的所有模型,您可以考虑将其附加到您的 AppModel。

于 2013-03-01T01:24:32.493 回答