رفتن به مطلب
انجمن پشتیبانی لاراول ایران

هاست لاراول با پشتیبانی 24 ساعته و امکانات کامل از مدیرهاست

Recommended Posts

سلام به بزرگواران

 

من سه  تیبل products categories subcategories دارم

وقتی پروداکت و کتگوری رو سینک میکنم ذخیره میشه در تیبل category_products

وقتی میخوام ساب کتگوری هم در ستون کناریش ذخیره بشه این پیغام میاد :

 

SQLSTATE[HY000]: General error: 1364 Field 'subcategory_id' doesn't have a default value (SQL: insert into `category_products` (`category_id`, `product_id`) values (1, 1))

 

این ها هم بخش از کدها هستند :

 

دیتابیس category_prodducts

$table->unsignedBigInteger('product_id');
$table->unsignedBigInteger('category_id');
$table->unsignedBigInteger('subcategory_id');
$table->foreign('product_id')
    ->references('id')
    ->on('products')
    ->onDelete('cascade');

$table->foreign('category_id')
    ->references('id')
    ->on('categories')
    ->onDelete('cascade');

$table->foreign('subcategory_id')
    ->references('id')
    ->on('categories')
    ->onDelete('cascade');

$table->primary(['category_id','product_id','subcategory_id']);

 

مدل product 

 
public function CATS(){
return $this->belongsToMany(Category::class, 'category_products',
'product_id', 'category_id');

}

 

مدل category

public function products(){
    return $this->belongsToMany(Products::class)->withTimestamps();
}
    public function SUBCAT(){
    return $this->belongsToMany(Category::class, 'category_category',
        'product_id', 'subcategory_id');
}

 

این هم در کنترلر پروداکت

 

$data->cats()->sync($request->cats,false);
$data->subcat()->sync($request->subcategory,false);

Share this post


Link to post
Share on other sites

هاست لاراول با پشتیبانی 24 ساعته و امکانات کامل از مدیرهاست

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

اگه منطق برنامه اتون این هست که همیشه زیرمجموعه داشته باشید باید مقدارش رو هم برای sync ارسال کنید در غیراینصورت باید ستون زیرمجموعه رو nullable کنید

Share this post


Link to post
Share on other sites
یه محصول یه کتگوری و یه ساب دارم.هر سه در سه تیبل جداگانه.
برای هر کدوم هم یه pivot تیبل هم زدم.
category_products
category_subcategory

از این کد برای ذخیره آی دی های محصول و دسته استفاده میکنم

$data->cats()->sync($request->category_id,false);

و از این کد هم برای ذخیره آی دی دسته و سابش :

$data1->subcat()->sync($request->subcat,false);

محصول و دسته اوکیه ولی دسته و سابش فقط دسته بدرستی ذخیره میشه و ساب یه ای دی کمتر ذخیره میکنه
مثلا : دسته شماره سه و ساب شماره ۳ ولی موقع ذخیره ۳ و ۲ ذخیره میشن.

این کد هم توی مدل محصول :


 
 
public function CATS(){
 
return $this->belongsToMany(Category::class, 'category_products',
 
'product_id', 'category_id');
 
}

این کد هم برای مدل دسته :


 
 
public function subcat()
 
{
 
return $this->belongsToMany(SubCategory::class, 'category_subcategory',
 
'category_id', 'subcategory_id');
 
}

 
 
این کد هم برای مدل ساب :
 
 
 
public function category(){
 
return $this->hasMany(Category::class);
 
}
 
public function products()
 
{
 
return $this->hasMany(Products::class);
 
}

امیدوارم درست تونسته باشم توضیح بدم

Share this post


Link to post
Share on other sites

وارد این گفتگو شوید

میتوانید پیام خود را ارسال کنید و بعد ثبت نام نمایید. در صورتی که حساب کاربری دارید, هم اکنون وارد شوید و در این گفتگو شرکت کنید.

مهمان
پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  Only 75 emoji are allowed.

×   لینک شما به صورت اتوماتیک جایگذاری شد.   نمایش به عنوان یک لینک به جای

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • جدید...