2

ORM Datamaperで自己関係(アップスチーム)参加を作成する方法を検討しています。私の自己関係クラスは次のようになります。

<?php
class Prospect extends DataMapper{

    var $has_one =array(
        'parent' => array(
            'class' => 'prospect',
            'other_field'=>'prospect'
        ),
        'prospect' => array(
        'other_field' => 'parent'
        )
    );




}

そして私はリストしようとします

include_related (parent)
$p->include_related('parent')->get();

エラーが発生しました致命的なエラー:[..]application/libraries/Datamapper.php2739行目の配列としてProspectタイプのオブジェクトを使用できません

できます

$p->include_related('prospect')->get();

しかし、この場合、私は間違った参加をしました。

SELECT `prospects`.*, `prospect_prospects`.`id` AS prospect_id, `prospect_prospects`.`name` LEFT OUTER JOIN `prospects` prospect_prospects ON `prospects`.`id` = `prospect_prospects`.`parent_id`

結果は、子->親(上流の関係)ではなく、親->子(下流の関係)の関係を示しています。

SELECT `prospects`.*, `prospect_prospects`.`id` AS prospect_id, `prospect_prospects`.`name` LEFT OUTER JOIN `prospects` prospect_prospects ON `prospects`.`parent_id` = `prospect_prospects`.`id`

それを行うためのヒント、そして私がそれを変更しなければならないことは何ですか?そして、どのように良いアップストリーム関係クラス/ phpコードを見る必要がありますか?

ps:直接SQLクエリは素晴らしい働きをします。

4

2 に答える 2

0

あなたが扱っているのは「相互」関係だと思います。このページを見てください:http://datamapper.wanwizard.eu/pages/advancedrelations.html

「多対多の相互の自己関係」というタイトルのセクションに移動し、それが役立つかどうかを確認します。

本質的に、それはプロパティに逆数を追加することの問題でなければなりません:

<?php
class Prospect extends DataMapper{

    var $has_one =array(
        'parent' => array(
            'class' => 'prospect',
            'other_field'=>'prospect',
            'reciprocal' => TRUE
        ),
        'prospect' => array(
            'other_field' => 'parent', 
            'reciprocal' => TRUE
        )
    );
}
于 2013-01-04T22:22:03.093 に答える
0

OK、問題が解決された
変数のは、関係のある配列を保持するためにDatamapperライブラリクラスで使用されるため、「親」は制限されており、まったく使用できませんでした。つまり、私の場合。私はparentからparent_companyに変更し、すべてがうまく機能しています。(これは私の左結合の問題も解決しました)。

于 2013-01-08T14:47:30.540 に答える