2013-12-17 60 views
0

我有兩個表畫廊,我已經建立了一個關係圖庫張貼表。 我的要求是, 當用戶上傳的內容它存儲在發佈表(內容字段), 如果用戶上傳的圖像是視頻我想存儲的圖像/視頻名稱,庫表和圖庫ID指的是帖子表。我不知道該怎麼做。請任何人幫助我?兩個表之間的關係:使兩個表之間的關係

交表:

CREATE TABLE IF NOT EXISTS `post` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
`user_id` bigint(20) unsigned NOT NULL, 
`gallery_id` bigint(20) unsigned NOT NULL, 

`content` longtext, 
`photo` varchar(128) DEFAULT NULL, 
`video` varchar(128) DEFAULT NULL, 

`created` timestamp NULL DEFAULT NULL, 
`updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
PRIMARY KEY (`id`), 
KEY `fk_forum_post_user` (`user_id`), 
KEY `fk_forum_post_gallery` (`gallery_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ; 

ALTER TABLE `post` 
ADD CONSTRAINT `fk_post_gallery` FOREIGN KEY (`gallery_id`) REFERENCES `gallery` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, 

畫廊表

CREATE TABLE IF NOT EXISTS `gallery` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
`user_id` bigint(20) unsigned NOT NULL, 
`type` int(11) NOT NULL DEFAULT '1' COMMENT '1- Photo, 2-Video, 3-Documents, 4-Unknown', 


`profile_picture` varchar(50) DEFAULT NULL, 
`forum_image` varchar(200) DEFAULT NULL, 
`forum_video` varchar(200) DEFAULT NULL, 
`forum_video_link` varchar(200) DEFAULT NULL, 

`created` timestamp NULL DEFAULT NULL, 
`updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
PRIMARY KEY (`id`), 
KEY `fk_gallery_user` (`user_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=60 ; 

是任何其他的想法是做或我怎麼能向前邁進?

+0

你還沒有做過什麼嗎?或者你可以通過你的模型代碼來獲得一個樣本嗎? – Asped

回答

0

有很多方法可以執行此任務。您可以在代碼級別以及數據庫級別上執行邏輯。然而,這是一個快速的答案。希望能幫助你

  • 首先取下色譜柱(gallery_id),因爲它是可能的,用戶可以擁有一個以上的圖像或視頻的單篇文章或用戶可能不希望上傳任何圖像/視頻在這種情況下,你畫廊ID將爲空。
  • 在這種情況下,你的PK將是唯一的帖子ID
  • 您的畫廊表是好的
  • 製作第三表名PostGalleryRealation
  • 使2列在該表帖子ID從交表和galleryid FK從畫廊FK表。
  • 這基本上是一對多的關係,因爲一個職位可能有不止一個畫廊
  • 插入的帖子ID和畫廊ID在PostGalleryRealation表
  • 最後,你可以寫這個查詢獲取的結果給你。

我沒有測試查詢,所以它只是一個基本的想法

Select p.id, p.content, p.created, g.type, g.profilepicture, g.forum_image 
    from post p, gallery g, postgalleryrelation pgr 
    where p.id = pgr.postid 
    and g.id = pgr.galleryid 
    and p.id = 1 

這只是一個想法。你可以做得更好。

+0

感謝您的回覆.. 現在我收到以下錯誤: (!)致命錯誤:最大功能嵌套級別達到'100',正在中止!在第103行的C:\ wamp \ framework \ db \ CDbCommand.php中 –

0

YII擁有relation選項,同時使用gii創建CRUD。爲此,您必須創建具有外鍵關係的表格。所以YII會自動創建編碼級別的關係。在創建兩個表格的模型時,您必須選擇選項Build Relation

查看Yii relation tutorials的更多信息