1

オブジェクトの関連フィールドを、構成ファイルでグローバルに、またはクラス全体でではなく、インスタンスごとに自動入力する簡単な方法があるかどうか疑問に思っています。

大量の関数をチェーンせずに、1つのインスタンスに関連するすべてのモデルを含めたいと思いinclude_related()ます。このようなものがいいでしょう:

$x = new Model();
$x->include_all_related();
4

2 に答える 2

1

芯の中で手を汚さないといけないと思った。なんらかの理由で、$has_many$has_one配列にアクセスできるとは思いもしませんでした。

解決策は簡単でした:

class Model extends Datamapper{
    var $has_one = array('foo', 'bar', 'baz');
    var $table = 'models';

    function __construct($id = NULL){
        parent::__construct($id);
    }

    function include_all_related(){
        foreach($this->has_one as $h){
            $this->include_related($h['class']);
        }
        return $this;
    }
}

なぜ変数のclassキーを使用しているのか不思議に思うかもしれません。$h内部的には、Datamapper ORMは、より大きな配列の一部として他のいくつかのキーも追跡します。電話をかけるとprint_r($h)、それらを見ることができます。キーは、、およびclassを追跡します。foobarbaz

于 2013-01-19T23:00:40.917 に答える
0

リレーション定義で有効にできます。特定のインスタンスで有効にする場合は、実行時にそのインスタンスのリレーション構成を変更する必要があります。

于 2013-01-21T17:33:43.190 に答える