PDA

View Full Version : رابطه‌ی بین پست و تگ



mah.tab
شنبه 03 خرداد 1393, 13:13 عصر
تو دمو بلاگ فریم ورک، هیچ رابطه‌ای (کلید خارجی‌ ) بین پست و تگ نیست، پس با چه روشی از روی تگا میفهمیم در چه پست‌هایی‌ استفاده شدند؟


CREATE TABLE tbl_post( id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, title VARCHAR(128) NOT NULL, content TEXT NOT NULL, tags TEXT, status INTEGER NOT NULL, create_time INTEGER, update_time INTEGER, author_id INTEGER NOT NULL, CONSTRAINT FK_post_author FOREIGN KEY (author_id) REFERENCES tbl_user (id) ON DELETE CASCADE ON UPDATE RESTRICT) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;



CREATE TABLE tbl_tag( id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(128) NOT NULL, frequency INTEGER DEFAULT 1) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

MRmoon
شنبه 03 خرداد 1393, 14:19 عصر
خوب اگه تو مدل هاشون رو نگاه کرده باشین از سرچ با لایک استفاده کرده.

MMSHFE
شنبه 03 خرداد 1393, 14:31 عصر
توی این سیستم، توی جدول پست یک فیلد tags داره که تگها رو داخل اون ذخیره میکنه و با کاما از هم جدا میشن. حالا این قسمت رو از اکشن index از کنترلر Post ببینید:

...
if(isset($_GET['tag']))
$criteria->addSearchCondition('tags',$_GET['tag']);
...
امیدوارم متوجه شده باشین.

mah.tab
شنبه 03 خرداد 1393, 16:12 عصر
یعنی‌ اگه بخوایم کتگوری داشته باشیم واسه پست هم میشه اینطوری عمل کرد ؟

MRmoon
شنبه 03 خرداد 1393, 16:17 عصر
بله میشه .....

MMSHFE
شنبه 03 خرداد 1393, 16:17 عصر
بله میشه ولی منطقی نیست چون قاعده اینه که یک پست فقط یک دسته بندی داره و یک دسته بندی چند پست (رابطه 1 به n) و برای اینجور موارد بهتره از relationها استفاده کرد.

mah.tab
شنبه 03 خرداد 1393, 16:26 عصر
خیلی ممنونم از شما ٢ تا دوست عزیز این آیا درسته؟



# -----------------------------------------------------------------------------# table : post# -----------------------------------------------------------------------------
create table if not exists post ( id_post integer not null auto_increment, id_user integer not null , id_category integer not null , content text not null , tags TEXT, create_time integer not null , update_time integer not null , primary key (id_post) ) engine=innodb default charset=utf8 collate=utf8_unicode_ci;

# -----------------------------------------------------------------------------# table : category# -----------------------------------------------------------------------------
create table if not exists category ( id_category integer not null auto_increment, name_category varchar(128) not null, id_post integer not null , primary key (id_category) ) engine=innodb default charset=utf8 collate=utf8_unicode_ci;

create index i_fk_post_category on post (id_category asc);

alter table post add foreign key fk_post_category (id_category) references category (id_category) ;

MMSHFE
شنبه 03 خرداد 1393, 16:39 عصر
بله فکر میکنم ولی چرا اصرار به استفاده از SQLite دارین؟ منظورم اینه که چرا از MySQL استفاده نمیکنید؟

mah.tab
شنبه 03 خرداد 1393, 16:41 عصر
مای اس کیو ال هست

MMSHFE
شنبه 03 خرداد 1393, 16:48 عصر
خوب پس چرا اینقدر دردسر میکشین؟ چرا با phpMyAdmin طراحی نمیکنید؟

mah.tab
شنبه 03 خرداد 1393, 16:51 عصر
اول مدل رو طراحی کردم, و بعد کد رو از اون گرفتم,
برای کلید خارجی و ... دستی کد زدن راحت تره, البته شما استادین این نظر شخصیمه

MMSHFE
یک شنبه 04 خرداد 1393, 11:22 صبح
توی phpMyAdmin هم میشه با سربرگ Designer بصورت ویژوال ارتباطها رو طراحی کرد. نمای Relation View هم که دیگه مخصوص همین کارها درنظر گرفته شده (سربرگ Structure)