2013-12-17 9 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

вы еще не сделали еще ничего ,? или можете ли вы использовать 3-мерный образец кода модели? – Asped

ответ

0

Существует множество способов выполнения этих задач. вы можете выполнять логику на уровне кода, а также на уровне базы данных. однако вот быстрый ответ. надеюсь, что это может помочь вам

  • Сначала Удалить столбец (gallery_id), как это возможно, что пользователь может иметь более одного изображения или видео для одного сообщения или пользователя может не захотеть, чтобы загрузить любое изображение/видео в этом случае вашего Идентификатор галереи будет равен нулю.
  • В этом случае ваш Рк будет только сообщения дан
  • ваша галерея стол прекрасно
  • Сделать имя PostGalleryRealation третьей таблицы
  • сделать 2 колонки в этой таблице сообщения дан, как Ф.К. из почтовой таблицы и galleryid как Ф.К. из галереи Таблица.
  • это в основном за один ко многим отношений, как один пост может иметь более одной галерею
  • вставить почтовый идентификатор и идентификатор галереи в 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» достигнут, прерывается! в C: \ wamp \ framework \ db \ CDbCommand.php в строке 103 –

0

YII есть relation опция при создании CRUD используя gii. Для этого вам необходимо создать таблицы с отношением внешнего ключа. Таким образом, YII автоматически создаст отношение на уровне кодирования. Вы должны выбрать опцию Build Relation при создании модели для обеих таблиц.

Проверьте Yii relation tutorials для получения дополнительной информации

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