Для лучшего пользовательского опыта я не хотел просто создавать случайную систему PM, но фактически группировал ее в разговоры. И как добавленная особенность, будучи в состоянии PM несколько людей одновременно. То, что было запрошено несколько раз. Поэтому я создал это:
/* User conversations ONE Conversation HAS MANY Conversation Members HAS MANY Users HAS MANY Private Messages ONE Private Message HAS ONE Conversation ONE User HAS MANY Conversation Member HAS ONE Conversation */ CREATE TABLE IF NOT EXISTS `tbl_user_pm_conv_members` ( `user_id` int(11), `conv_id` int(11) ); CREATE TABLE IF NOT EXISTS `tbl_user_pm_conv` ( `id` int(11) NOT NULL AUTO_INCREMENT, `owner_id` int(11) NOT NULL, `subject` varchar(255) NOT NULL, PRIMARY KEY (`id`) ); CREATE TABLE IF NOT EXISTS `tbl_user_pm_msg` ( `id` int(11) NOT NULL AUTO_INCREMENT, `conv_id` int(11) NOT NULL, `from_id` int(11) NOT NULL, `body` text NOT NULL, `sent` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) );
Надеюсь, это действительно имеет смысл …
Теперь я хотел установить отношение n: m в Yii (1.1.16 в настоящее время). Но независимо от того, что я делаю, он не хочет разрешать.
В User.php:
public function relations() { return array( 'profile'=>array(self::HAS_ONE, 'UserProfile', 'uID'), 'updates'=>array(self::HAS_MANY, "UserUpdate", "tID"), 'permissions'=>array(self::HAS_MANY, "UserPermissions", "uID"), 'settings'=>array(self::HAS_ONE, "UserSettings", "id"), 'convos'=>array( self::MANY_MANY, "PrivateConversation", "tbl_user_pm_conv_members(id,id)", ) ); }
По логике Yii мои FK, вероятно, были user_id
и convo_id
, в результате чего tbl_user_pm_conv_members(user_id, convo_id)
. У меня также нет ограничений MySQL, поскольку я еще не понял их.
Когда я пытаюсь print_r($user->convos)
, я получаю следующее:
2015/04/28 23:49:01 [error] [system.db.CDbCommand] CDbCommand::fetchAll() failed: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'convos_convos.id' in 'on clause'. The SQL statement executed was: SELECT `convos`.`id` AS `t1_c0`, `convos`.`owner_id` AS `t1_c1`, `convos`.`subject` AS `t1_c2` FROM `tbl_user_pm_conv` `convos` INNER JOIN `tbl_user_pm_conv_members` `convos_convos` ON (`convos_convos`.`id`=:ypl0) AND (`convos`.`id`=`convos_convos`.`id`). 2015/04/28 23:49:01 [error] [exception.CDbException] exception 'CDbException' with message 'CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'convos_convos.id' in 'on clause'' in /Users/Ingwie/Work/BIRD3/php_modules/yiisoft/yii/framework/db/CDbCommand.php:543
Я потерян. Каков правильный способ установления отношения n: m?