0

既に宣言されているときに含むように追加する方法は?

  1. 通常の包含/検索を呼び出します:

    // A controller
    $this->Site->contain(array('User'));
    $site = $this->Site->find();
    
  2. 含むものを自動的に追加したい。検索機能に追加することで、モデルでこれを行うことを考えていました...次のようなもの:

    // Site.php Model
    function find($conditions = null, $fields = array(), $order = null, $recursive = null) {
        if(!isset($this->containVariable) || !in_array('Box', $this->containVariable)) {
            $this->containVariable[] = 'Box';
        }
        parent::find($conditions, $fields, $order, $recursive);
    }
    

これを機能させる (モデルボックス$this->containVariableを自動的に追加して格納する) には、既に格納されているものの配列を持つ関数または変数によって変更するだけで済みます。この場合、これは を返しarray('User')ます。既に宣言されているときに含むように追加する方法は? 含む変数はありますか?

4

2 に答える 2

0

おそらく、複数の検索呼び出し (cakephp 1.3 を使用) の保持に関する同様の問題を修正しました。特定のモデルに対して含まれていると宣言した後、これはそのモデルに対して設定されます。

$this->Behaviors->Containable->runtime

-ここで、$this はモデル オブジェクトです。'runtime' は、基本的に含まれている情報を保持する配列です。だからあなたは近いと私は信じていますが、代わりに:

$this->containVariable[] = 'Box'

次のようになります。

$this->Behaviors->Containable->runtime['someModel']['contain'][] = 'Box'

ただし、モデル以外のものを指定できるようにするには、次のように処理するように設定する必要があります (おそらくそれに応じてメソッドを構築します)。

$this->Behaviors->Containable->runtime['someModel']['contain'][] = $model_contain_array

$model_contain_array は、特定のモデルに追加したい内容情報を保持する配列に対して選択した任意の名前です。$model_contain_array の例は次のとおりです。

array('modelName' => array(
    'fields' => array('id', 'other'),
    'otherModelName' => array(
        'fields' => array('id', 'otherfield', 'etc')
    )
)
于 2012-07-24T20:26:16.943 に答える
0

誰かが別の解決策を見つけられない限り、私は次の結論に達しました:

残念ながら、私がやろうとしていたことは、containable がどのように設計されているかは不可能に思えます。->contain()すべての呼び出しにモデルを手動で追加する必要がありました。

于 2012-07-10T23:02:15.673 に答える