Как добавить условия для связанной модели (ownTo) в CakePHP 1.3? - PullRequest
2 голосов
/ 08 декабря 2010

Я видел похожие вопросы, но их ответы, похоже, не работают для меня.Кажется, это должно быть очень просто, поэтому я чувствую себя довольно глупо, спрашивая.

У меня есть модель под названием Preappform, в которой есть многие модели агентов (которые принадлежат для Preappform).Модель агента имеет поле, содержащее хэш.Когда я получаю Preappform, он автоматически возвращает мне любых агентов, связанных соответствующим внешним ключом, но я бы хотел ограничить этот список агентов только теми, чье поле Agent.hash соответствует указанному условию.

Вот текущий код:

models / agent.php

class Agent extends AppModel {
    var $name = "Agent"; // Singular for instances. 
    var $belongsTo = array('Preappform');
}

models / preappform.php

class Preappform extends AppModel {
    var $name = "Preappform";
    var $hasMany = array('Agent'); 
    /* snip, some validation stuff */
}

В контроллере ... (следуя примеру других)

// $id = 18
// $hash is set to false, or a nonexistent value. 

$the_form = $this->Preappform->find('first', 
    array(
        'conditions' => array('Preappform.id' => $id), 
        'contain' => array('Agent' => array('conditions' => array('Agent.hash' => $hash))) 
    )    
); 

Результат:

Arrray
(
    [Preappform] => Array
        (
            [id] => 18
            [created] => 2010-12-03 08:56:12
            [modified] => 2010-12-03 08:56:12
            [completed] => 0
            /* ... */
        )


    [Agent] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [preappform_id] => 18
                    [hash] => f312d4b401fecc8ce0f8dca6eb7c1ca6ad9f5956
                )

            [1] => Array
                (
                    [id] => 2
                    [preappform_id] => 18
                    [hash] => f312d4b401fecc8ce0f8dca6eb7c1ca6ad9f5957
                )

        )

)

Я играл с различными версиями "contains" и разными значениями для "recursive" в PreappformМодель, но не может показаться фильтром доступных агентов.

Я думал, что это будет так же просто, как

$the_form = $this->Preappform->find(
    'first', 
    array('conditions' => array(
        'Preappform.id'=> $id, 
        'Agent.hash' => $hash
        ) 
    )
);

... но это всегда выдает ошибку "Неизвестный столбец: Агент ...".

Как можноЯ применяю условия для фильтрации агентов, возвращаемых с моей моделью Preappform?

Ответы [ 3 ]

1 голос
/ 08 декабря 2010

В модели

models/preappform.php // add this
var $actsAs = array('Containable');

В контроллере

models/preappform.php
$the_form = $this->Preappform->find(
    'first', 
    array(
         'conditions' => array('Preappform.id' => $id) ,
         'contain' => array('Agent' => array('conditions' => array('Agent.hash'=>$hash)))
    )
);
1 голос
/ 08 декабря 2010

Аналогично ответу Иша Кумара , но с исправлением:

Модель Preappform (родительская) должна «действовать как контейнер».

Когда я добавил следующую строку в модель Preappform:

var $actsAs = array('Containable');

... условия «содержать» в следующем коде начали работать, как и ожидалось:

$the_form = $this->Preappform->find('first', 
    array(
        'conditions' => array('Preappform.id' => $id), 
        'contain' => array('Agent' => array('conditions' => array('Agent.hash =' => $hash))) 
    )
); 

Спасибо!

0 голосов
/ 08 декабря 2010

Я считаю, что вы можете сделать что-то вроде: array('contain' => 'Agent.hash = "'.$hash .'"')

...