#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/… Спасибо за ваши усилия