There is a table of users
CREATE TABLE `user` ( `user_id` INT(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`user_id`) ) COLLATE='utf8_unicode_ci' ENGINE=InnoDB AUTO_INCREMENT=4; INSERT INTO `user` (`user_id`) VALUES (1); INSERT INTO `user` (`user_id`) VALUES (2); INSERT INTO `user` (`user_id`) VALUES (3); And a table storing users who are subscribed to other users)
CREATE TABLE `user_subscriber` ( `user_subscriber_id` INT(11) NOT NULL AUTO_INCREMENT, `user_id` INT(11) NULL DEFAULT NULL, `subscriber_id` INT(11) NULL DEFAULT NULL, PRIMARY KEY (`user_subscriber_id`), INDEX `user_id` (`user_id`), INDEX `subscriber_id` (`subscriber_id`), CONSTRAINT `fk-user_subscriber-user` FOREIGN KEY (`subscriber_id`) REFERENCES `user` (`user_id`) ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT `fk-user_subscriber-user-self` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON UPDATE CASCADE ON DELETE CASCADE ) COLLATE='utf8_unicode_ci' ENGINE=InnoDB AUTO_INCREMENT=4; INSERT INTO `user_subscriber` (`user_id`, `subscriber_id`) VALUES (1, 2); INSERT INTO `user_subscriber` (`user_id`, `subscriber_id`) VALUES (1, 3); INSERT INTO `user_subscriber` (`user_id`, `subscriber_id`) VALUES (3, 2); INSERT INTO `user_subscriber` (`user_id`, `subscriber_id`) VALUES (3, 1); where user_id is subscribed to
subscriber_id - who is subscribed
For example, the 1st user has two subscribers of the 2nd and 3rd users, and in turn is subscribed to the 3rd user.
I try to make relaying to the user.
class User extends ActiveRecord { /** * @return \yii\db\ActiveQuery */ public function getUserSubscribers() { return $this->hasMany(UserSubscriber::className(), ['user_id' => 'user_id']); } /** * @return \yii\db\ActiveQuery */ public function getSubscribers() { return $this->hasOne(User::className(), ['user_id', 'subscriber_id']) ->via('userSubscribers'); } } Well, pull it out
//Тут все подтянулось $userSubscribers = $model->userSubscribers; //А вот тут ловлю ошибку $subscribers = $model->subscribers; SQLSTATE [42S22]: Column not found: 1054 Unknown column '0' in 'where clause' SQL line executed: SELECT * FROM
userWHERE (0,1) IN ((1, 2), (1, 3))
For some reason the request breaks. Perhaps because of the link to himself.