2013-12-17 212 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的更多信息