Awmx
6 سال پیش توسط Awmx مطرح شد
6 پاسخ

ایجاد سیستم تگینگ

سلام دوستان
من برای پروژم نیازه که تگ یا همون برچسب هارو برای مقالات و محصولاتم نمایش بدم
هر اموزشی که خوندم طوری بود که کاربر باید تگ ها از یه بخش دیگ اضافه میکرد بعدش توی ایجاد مقاله از داخل یه لیست که حاوی اون تگ هایی بود که قبلا اضافه کرده بود به دیتابیس , تگ هاشو انتخاب میکرد
اما من میخوام یجورایی مثل سیستم تگینگ وردپرس باشه که کاربر هرتگی که دلش میخواد وارد میکنه
میشه یه توضیحی برای ایجادش بدید یا مقاله ای که چیزی رو که میخوام توضیح داده باشه معرفی کنید؟


ثبت پرسش جدید
محمد صادقیان
تخصص : برنامه نویس وب - فریم ورک Lara...
@drcode.ir 6 سال پیش مطرح شد
1

من خودم باشم یک جدول با ساختار زیر میزنم :

Schema::create('tags', function (Blueprint $table) {
  $table->increments('id');
  $table->string('title');
  $table->string('slug', 191)->unique();
  $table->enum('type', ['article', 'product']);
  $table->timestamps();
});

فقط توجه داشته باش برای روش اول باید یک جدول دیگه هم با عنوان article_tags بزنی و تگ های مطالب رو اونجا ذخیر کنی.البته این کار بستگی به این داره مقالات و محصولات در 1 جدول باشه یا جدا جدا باشه. اگه جدا جدا باشه بهتره برای هر کدوم یک جدول جدا بزنی که کارت راحت تر باشه یعنی :

  • article_tags
  • product_tags

و ساختار جدول هم به این صورت خواهد بود :

Schema::create('article_tags', function (Blueprint $table) {
  $table->increments('id');
  $table->string('article_id');
  $table->string('tag_id');
  $table->timestamps();

  $table->foreign('article_id')->references('id')->on('articles');
  $table->foreign('tag_id')->references('id')->on('tags');
});

محمد صادقیان
تخصص : برنامه نویس وب - فریم ورک Lara...
@drcode.ir 6 سال پیش مطرح شد
1

سلام. اول یه توضیح مختصر در مورد سیستم تگینگ بهتون میدم :

  • این سیستم رو میشه به 2 صورت پیاده سازی کرد :
    1 - یک جدول tags در نظر بگیرید و تمام تگ هاتون رو وارد اون بکنید و به قول خودتون کاربر موقع اضافه کردن مطلب جدید بتونه از بین اونا انتخاب کنه و یا بتونه همون لحظه توسط ajax تگ جدیدی رو اضافه کنه.
    2 - روش دوم به این صورت هست که برای هر مطلب تگ های مختص خودش تعریف می شود و این کار به صورت زیر می تونید انجام بدید:
    داخل جدول مطالب یک فیلد به نام tags از نوع string در نظر بگیرید و تگ های کاربر رو به صورت آرایه در اون ذخیره کنید.
    ['tag3','tag2','tag1']

    توجه کنید اگر بخواید از این روش استفاده کنید باید در Model اون مطالب این رو تعریف کنید :

    protected $casts = [
    'tags' => 'array'
    ];'

Awmx
@awmx 6 سال پیش مطرح شد
0

@dr-code.ir
اتفاقا قبلا از روش دوم برای تگ ها استفاده کردم اما یه مشکلی داشتم
مثلا یه مقاله 3تا تگ داره کاربر روی یه تگ کلیک میکنه حالا چطور مقاله هایی که اون تگ رو دارن نمایش بدم؟


محمد صادقیان
تخصص : برنامه نویس وب - فریم ورک Lara...
@drcode.ir 6 سال پیش آپدیت شد
1

روش دوم رو پیشنهاد نمی کنم چون باعث انباشتگی دیتا میشه. یعنی فرض کنید 100 تا مقاله دارید شما و توی 50 تاشون تگ "مقاله" تکرار شده و این اصلا درست نیست.

  • ولی اگر استفاده کردید برای اینکه مقاله های مرتبط با اون تگ رو پیدا کنید می تونید به روش زیر عمل کنید :

    $tag = 'داستان';
    $articles = Article::whereIn('tags', "[$tag]")->get();

Awmx
@awmx 6 سال پیش مطرح شد
0

@dr-code.ir
ممنونم
چون هم برای محصولات و هم برای مقالات میخوام , برای روش اول از روابط پلی مورفیک استفاده کنم؟
یا برای هرکدوم یه تیبل جداگانه ایجاد کنم؟
(البته این سوالو داخل لاراکست پرسیدم و گفتن پلی مورفیک خیلی پیچیده میکنه کارو , تیبل جداگانه ایجاد کن و .... حالا میخوام نظر شمارو هم بدونم)


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 6 سال پیش مطرح شد
2

@m.delshad78
خیلی راحت از روابط پلی‌مورفیک استفاده کنید. در گفتگوی زیر کامل بهش اشاره شده:
https://roocket.ir/discuss/2390


محمد صادقیان
تخصص : برنامه نویس وب - فریم ورک Lara...
@drcode.ir 6 سال پیش مطرح شد
1

من خودم باشم یک جدول با ساختار زیر میزنم :

Schema::create('tags', function (Blueprint $table) {
  $table->increments('id');
  $table->string('title');
  $table->string('slug', 191)->unique();
  $table->enum('type', ['article', 'product']);
  $table->timestamps();
});

فقط توجه داشته باش برای روش اول باید یک جدول دیگه هم با عنوان article_tags بزنی و تگ های مطالب رو اونجا ذخیر کنی.البته این کار بستگی به این داره مقالات و محصولات در 1 جدول باشه یا جدا جدا باشه. اگه جدا جدا باشه بهتره برای هر کدوم یک جدول جدا بزنی که کارت راحت تر باشه یعنی :

  • article_tags
  • product_tags

و ساختار جدول هم به این صورت خواهد بود :

Schema::create('article_tags', function (Blueprint $table) {
  $table->increments('id');
  $table->string('article_id');
  $table->string('tag_id');
  $table->timestamps();

  $table->foreign('article_id')->references('id')->on('articles');
  $table->foreign('tag_id')->references('id')->on('tags');
});

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام