علیرضا مه آبادی
3 سال پیش توسط علیرضا مه آبادی مطرح شد
2 پاسخ

عدم درک مفهوم کد در validation

عرض ادب خدمت مهندسین عزیز🌹 بنده در درک این بخش کد برای اعتبار سنجی مشکل دارم و مفهومش را متوجه نمی شم.(بیشتر مفهوم attach متوجه نمی شم)

  public function store(Request $request)
    {
        $validated = $request->validate([
            'users' => 'nullable|array|exists:users,id',
        ]);
        $discount = Discount::create($validated);
        $discount->users()->attach($validated['users']);

و در اینجا هم ادامه همان کد در بخش update ولی اینبار مشکل در درک sync و detach دارم

   public function update(Request $request,Discount $discount)
    {
        $validated = $request->validate([
            'users' => 'nullable|array|exists:users,id',
        ]);
        $discount->update($validated);
        isset($validated['users'])
            ? $discount->users()->sync($validated['users'])
            : $discount->users()->detach();

ثبت پرسش جدید
مهدی شاه عباسیان
تخصص : برنامه نویس
@shahabbasian 3 سال پیش مطرح شد
0

سلام

دوست من attach و sync و detach ربطی به validation کردن اطلاعات نداره
این موارد برای اضافه کردن اطلاعات به جداول دارای روابط هست.

در کد اول

$discount = Discount::create($validated);

اینجا discount جدید ساخته میشه
و با attach

$discount->users()->attach($validated['users']);

در اینجا همینطور که میبینید discount که ساخته شد با discount->user() داره به رابطه مدل discount با مدل user اشاره میکنه که با attach و دادن user بهش خودکار جدول رابط رو برای این discount و user پر میکنه

در آخر sync کارش اینه که همه رابطه های موجود discount رو حذف میکنه و این جدید هارو توش میریزه
و detach رابطه که بهش اشاره شده رو حذف میکنه


مهران مرندی
تخصص : برنامه نویس
@mehranmarandi 3 سال پیش آپدیت شد
0

این دو بخشی که فرمودید ارتباطی با خود validate ندارن
متدهایی برای اتصال چند به چند هست. در elequent وقتی میخوایید دوتا جدول رو از طریق یه جدول واسطه به هم متصل کنید، بعد از این که در مدل های دو جدول اصلی تعریف کردید که ارتباطشون با هم از طریق کدوم جدول واسطه هست، برای اتصال رکورد های این دو جدول به هم دیگه از متد های زیر استفاده میشه

برای متصل کردن یه رکورد از جدول categories به products

$products->categories()->attach($category_id );

برای قطع اتصال یه رکورد از جدول categories به products

$products->categories()->detach($category_id );

و اگر بخواییم دسته ای چند تا رکورد با آید های 1 و 2 و 3 از جدول categories رو با یه رکورد از جدول products متصل کنیم با sync اینکار انجام میشه

$products->categories()->sync([1, 2, 3]);

و همچنین اگر میخوایید id های ۱ ۲ ۳ اضافه بشن و اگر id دیگه ای هم از قبل بود حذف نشه اینجوری

$products->categories()->syncWithoutDetaching([1, 2, 3]);

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

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