Фреймворк Yii: пропускает много при условии, что не работает?

#yii #has-many-through

#yii #has-many-through

Вопрос:

Я не знаю, что происходит, потому что что-то не складывается, поэтому собираюсь обратиться к сообществу за помощью.

У меня есть ипотека, в которой есть 1 основной заявитель и 1 или более (много) соавторов.

Отношение в моей модели mortgage является:

 // primary applicant connection
'primaryApplicantConnection' => array(self::HAS_ONE, 'PersonToMortgage', 'mortgage_id',
    'condition' => 'is_primary=1'
 ),

// primary applicant info
'primaryApplicant' => array(self::HAS_ONE, 'Person', 'person_id', 
    'through' => 'primaryApplicantConnection'),

// co-applicant connection
'coApplicantConnection' => array(self::HAS_MANY, 'PersonToMortgage', 'mortgage_id',
    'condition' => 'is_primary<>1 OR is_primary IS NULL'
),

// co-applicants' info
'coApplicants' => array(self::HAS_MANY, 'Person', 'person_id',
    'through' => 'coApplicantConnection'
),
  

В контроллере закладных,

 $mortgage_model=$this->loadModel($id);
$primaryApplicant = $mortgage_model->primaryApplicant; // return expect result
$coApplicants = $mortgage_model->coApplicants; // the problem is here
  

Когда я хочу получить всех соавторов, используя $mortgage_model-> Соавторы, результат также включает основного заявителя.

Чтобы отследить проблему, я попробовал это $mortgage_model-> coApplicantConnection, которое возвращает только строки со-заявителя.

Итак, мне интересно, откуда берется основной кандидат? и как это заканчивается в $mortgage_model-> Соисполнители? это ошибка?

Ответ №1:

Похоже, что происходит то, что если вы используете функцию loadModel ($ id) по умолчанию, она использует «findByPk», которая вернет только один результат на основе первичного ключа, предположительно в вашем случае основного заявителя, независимо от других условий. Вам нужно создать модель таким образом, чтобы она использовала условия и возвращала более одной строки с чем-то вроде:

 $model = Mortgage::model()->findAll();
  

а затем примените отношение к этому результату.

Комментарии:

1. Я попробую ваше предложение и дам вам знать, сработает ли оно. Спасибо

2. Как оказалось, условие в моем bridge tbl игнорируется (например, ‘condition’ => ‘is_primary<>1 ИЛИ is_primary РАВНО NULL’). Я продолжаю отправлять отчет об ошибке. Оригинальное сообщение — @ yiiframework.com/forum/index.php?/topic/… Спасибо за ваши усилия