PDA

View Full Version : انتخاب چند دسته و ذخیره در جدول واسط



rahahost
سه شنبه 01 اردیبهشت 1394, 13:30 عصر
با سلام خدمت همه دوستان :)


داشتم برای یکی از پروژه هام بخش خبر ها رو طراحی میکردم که یه سوالی برام بوجود اومد !

یه جدول داریم به اسم : posts
یک جدول هم برای دسته ها : cats
یه جدول واسطه ای هم داریم برای پست و دسته ( برای اینکه ممکنه یک خبر شامل چندین دسته باشه )

حالا زمانی که دارم پست رو درج میکنم ، ممکنه 5 تا دسته رو همزمان شامل بشه و انتخابشون کنم ( از متد sync() برای اضافه کردن رکورد به جدول واسطه ای استفاده میکنم )
بعد از انتشار ، زمانی که میخوام ویرایشش کنم ، باید دسته هایی که انتخاب شده بودن رو نشونم بده ، درسته ؟

نمیدونم این بخش رو چطور پیاده سازی کنم !
سوال : چطور میتونم لیست همه ی دسته هارو نمایش بدم و گزینه هایی که انتخاب شدن رو تیک بزنم ( فرضا چکباکس استفاده شده ) !

ممنون میشم راهنماییم کنید .

Mahdi-563
سه شنبه 01 اردیبهشت 1394, 18:53 عصر
با متد with می تونی به روابط دسترسی داشته باشی برای خودن

foreach (Book::with('author')->get() as $book)
{
echo $book->author->name;
}برای ویرایش هم متد sync خودش چک می کنه (حذف و ویرایش)
$user->roles()->sync([1, 2, 3]);
منبع : http://laravel.com/docs/5.0/eloquent#relationships

tresa022
سه شنبه 01 اردیبهشت 1394, 19:12 عصر
بجای اینکه بیای ی جدول دیگه تعریف کنی بهتره بک فیلد به جدول پست بذاری و دسته ها رو با یک کاراکتور جدا کنی مثلا 1و1و2و2و3و34وو5و4و3و بعد ب راحتی با توابع explode تشخیص بدی خیلی راحت تره

rahahost
سه شنبه 01 اردیبهشت 1394, 22:54 عصر
با متد with می تونی به روابط دسترسی داشته باشی برای خودن

foreach (Book::with('author')->get() as $book)
{
echo $book->author->name;
}برای ویرایش هم متد sync خودش چک می کنه (حذف و ویرایش)
$user->roles()->sync([1, 2, 3]);
منبع : http://laravel.com/docs/5.0/eloquent#relationships


مشکل در نمایش دسته های انتخاب شده نیست ، مشکل اینجاست که باید همه ی دسته های هم نمایش داده بشه و از بین اونها ، دسته هایی که درون اون پست انتخاب شده بود ، تیک بخوره !





بجای اینکه بیای ی جدول دیگه تعریف کنی بهتره بک فیلد به جدول پست بذاری و دسته ها رو با یک کاراکتور جدا کنی مثلا 1و1و2و2و3و34وو5و4و3و بعد ب راحتی با توابع explode تشخیص بدی خیلی راحت تره

این روش مزیت ها و معایبی داره !
عیبش اینه که : وقتی میخواین پست های یک دسته رو نمایش بدید ، به مشکل برمیخورید و یا با کدهایه زیادی باید کار رو پیش ببرید !



فکر کنم این مشکل بدست آقا رضا خدادادی حل میشه :D

rezakho
چهارشنبه 02 اردیبهشت 1394, 07:02 صبح
چیزی که الان به ذهنم میرسه اینه، روش های دیگه مثل گرفتن 2 کوئری و مقایسه در سمت php هم وجود داره، ولی به گمانم این روش در کل بهتره

SELECT cats.id, cats.name, IF(cc.postId IS NOT NULL, 1, 0) AS checked FROM cats
LEFT JOIN (SELECT * FROM posts_cats WHERE postId = $postId)AS cc ON cats.id = cc.catId
GROUP BY cats.id


این کوئری رو با کوئری بیلدر واکشی کن، خروجی رو بزار توی یه حلقه برای چاپ چکباکس ها، اگر فیلد checked برابر 1 بود، تیک بزن و اگر 0 بود نزن
$postId هم آی دی خبرت هست

imohammad
یک شنبه 06 اردیبهشت 1394, 17:26 عصر
اینجا رو ببین کارتو راه میندازه
https://laracasts.com/series/laravel-5-fundamentals/episodes/22

tuytoosh
پنج شنبه 17 اردیبهشت 1394, 07:24 صبح
از Form Model Binding (https://scotch.io/quick-tips/laravel-form-model-binding) استفاده کنید. خودش فرم رو تکمیل میکنه بدون اینکه شما کار خاصی انجام بدید.

Mahdi-563
پنج شنبه 17 اردیبهشت 1394, 08:52 صبح
مشکل در نمایش دسته های انتخاب شده نیست ، مشکل اینجاست که باید همه ی دسته های هم نمایش داده بشه و از بین اونها ، دسته هایی که درون اون پست انتخاب شده بود ، تیک بخوره !


با چند تاخط کد جی کوری می تونی انتخاب شون کنی منم این کارو می کنم

tuytoosh
جمعه 18 اردیبهشت 1394, 15:25 عصر
این لینک دقیقا همون چیزیو گفته که تو میخوای: https://gist.github.com/lukemartin/2972059

rahahost
جمعه 18 اردیبهشت 1394, 17:04 عصر
با چند تاخط کد جی کوری می تونی انتخاب شون کنی منم این کارو می کنم

میشه نمونه کدتون رو قرار بدید ؟

Mahdi-563
سه شنبه 22 اردیبهشت 1394, 21:18 عصر
$("#ajax-checkbox_tag").empty(); // Clear status list.
$.ajax({
url: '/admin/json_tags/' + $("#select2-option").val(),
type: "get",
dataType: "html",
success: function(strData) {
$('#checkbox_tag').html(strData);

var id = 2;
$("#checkbox_tag [value="+id+"]").attr('checked','checked');

}
});
});