2013-12-25 2 views
0

Это моя структура базы данных:Yii CActiveRecord отношение по внешнему ключу отношения

CREATE TABLE `rs_payment` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `amount` int(11) NOT NULL DEFAULT '0', 
    `user_fid` int(11) NOT NULL, 
    `payment_created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `payment_end_date` timestamp NULL DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `user_fid` (`user_fid`), 
    CONSTRAINT `rs_payment_ibfk_1` FOREIGN KEY (`user_fid`) REFERENCES `rs_user` (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

CREATE TABLE `rs_payment_to_complex` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `payment_fid` int(11) NOT NULL, 
    `complex_fid` int(11) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `payment_fid` (`payment_fid`), 
    KEY `complex_fid` (`complex_fid`), 
    CONSTRAINT `rs_payment_to_complex_ibfk_2` FOREIGN KEY (`complex_fid`) REFERENCES `rs_complex` (`id`), 
    CONSTRAINT `rs_payment_to_complex_ibfk_1` FOREIGN KEY (`payment_fid`) REFERENCES `rs_payment` (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

CREATE TABLE `rs_user` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `email` varchar(258) NOT NULL, 
    `password` text NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

CREATE TABLE `rs_complex` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` text NOT NULL, 
    `reservation_schedule` tinyint(4) NOT NULL DEFAULT '1', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

А это мои отношения в модели PaymentToComplex:

public function relations() 
{ 
    return array(
     'complexF' => array(self::BELONGS_TO, 'Complex', 'complex_fid'), 
     'paymentF' => array(self::BELONGS_TO, 'Payment', 'payment_fid'), 
     'userF' => array(self::BELONGS_TO, 'User', 'payment_fid'), 
     //'userF' => array(self::BELONGS_TO, 'User', 'paymentF.user_fid'), 
    ); 
} 

Сложных и платежные отношения работы Колодец. Отношение пользователя фактически связано с запросом следующим образом: LEFT OUTER JOIN rs_user userF ON (t.payment_fid=userF.id).

Мне нужно обновить внешний ключ userF, чтобы присоединиться к user_fid столбец таблицы rs_payment. Комментируемый код не работает.

Благодарим за помощь.

ответ

1

Вы должны использовать, чтобы получить CActiveRecord::throughuserF используя paymentF следующим образом:

'userF' => array(self::BELONGS_TO, 'User', array('user_fid'=>'id'),'through'=>'paymentF'), 

Больше на http://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-with-through

+0

Большое спасибо. Только небольшое изменение в отношении. HAS_ONE работает для меня. –

Смежные вопросы