1

*編集/更新*

私は解決策を見つけましたが、なぜこれが必要なのか本当にわかりません。これがなぜなのか誰かが答えられたら、それは素晴らしいことです。

MoveInHome のフィールド リストに「floorplan_id」を追加すると、MediaFloorplan がデータに表示されることがわかりました。MoveInHome には多くのフロアプランがあります。含まれている「Floorplan」のフィールド内に「id」が見つかったため、奇妙です

*編集/更新の終了*

私は住宅建設業者のプロジェクトに取り組んでおり、containable を介してデータを取得する際に問題が発生しています。

アプリモデルにはこれがあります:

public $actsAs = array("Containable");

FloorplansController から MoveInHome モデルへの呼び出しを行っています

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

MoveInHome belongsTo フロアプラン

フロアプランには多くのメディアがありますフロアプラン

モデル内の関数は次のとおりです。

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 に答える