lundi 7 octobre 2019

How show product with selected category in Laravel 5.8?

I am beginner in Laravel. I make my project in Laravel 5.8.

I have this code:

  1. Migration
    Schema::create('product_categories', function (Blueprint $table) {
                $table->bigIncrements('id');
                $table->bigInteger('company_id')->unsigned();
                $table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade');
                $table->char('enable', 1)->default(0);
                $table->string('name', 85)->nullable();
                $table->string('url_address', 160);
                $table->integer('level')->default(0);
                //$table->bigInteger('parent_id')->default(0);
                //$table->bigInteger('parent_id')->nullable();
                $table->unsignedBigInteger('parent_id')->nullable();
                $table->foreign('parent_id')->references('id')->on('product_categories')->onDelete('cascade');
                $table->bigInteger('number')->default(0);
                $table->timestamps();
                $table->engine = "InnoDB";
                $table->charset = 'utf8mb4';
                $table->collation = 'utf8mb4_unicode_ci';
            });

    Schema::create('products', function (Blueprint $table) {
                $table->bigIncrements('id');
                $table->bigInteger('company_id')->unsigned();
                $table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade');
                //$table->bigInteger('category_id')->unsigned();
                //$table->foreign('category_id')->references('id')->on('product_categories');
                $table->smallInteger('id_delivery_vat')->unsigned();
                $table->foreign('id_delivery_vat')->references('id')->on('vat');
                $table->smallInteger('id_product_vat')->unsigned();
                $table->foreign('id_product_vat')->references('id')->on('vat');
                $table->bigInteger('id_producer')->unsigned();
                //$table->foreign('id_producer')->references('id')->on('product_producers');
                $table->string('name', 120)->nullable();
                $table->string('qr_code', 120)->nullable();
                $table->string('oe_code', 120)->nullable();
                $table->char('enable', 1)->default(0);
                $table->char('promo', 1)->default(0);
                $table->longText('description')->nullable();
                $table->decimal('product_price', 9, 2)->default(0);
                $table->decimal('promo_product_price', 9, 2)->default(0);
                $table->decimal('product_delivery_price', 9, 2)->default(0);
                $table->unsignedInteger('quantity')->default(0);
                $table->string('url_address', 160);
                $table->timestamps();
                $table->engine = "InnoDB";
                $table->charset = 'utf8mb4';
                $table->collation = 'utf8mb4_unicode_ci';
            });

    Schema::create('product_selected_categories', function (Blueprint $table) {
                $table->bigIncrements('id');
                $table->bigInteger('category_id')->unsigned()->index();
                $table->foreign('category_id')->references('id')->on('product_categories');
                $table->bigInteger('subcategory1_id')->default(0);
                $table->bigInteger('parent_subcategory1_id')->default(0);
                $table->bigInteger('subcategory2_id')->default(0);
                $table->bigInteger('parent_subcategory2_id')->default(0);
                $table->bigInteger('subcategory3_id')->default(0);
                $table->bigInteger('parent_subcategory3_id')->default(0);
                $table->bigInteger('subcategory4_id')->default(0);
                $table->bigInteger('parent_subcategory4_id')->default(0);
                $table->bigInteger('subcategory5_id')->default(0);
                $table->bigInteger('parent_subcategory5_id')->default(0);
                $table->bigInteger('subcategory6_id')->default(0);
                $table->bigInteger('parent_subcategory6_id')->default(0);
                $table->bigInteger('subcategory7_id')->default(0);
                $table->bigInteger('parent_subcategory7_id')->default(0);
                $table->bigInteger('subcategory8_id')->default(0);
                $table->bigInteger('parent_subcategory8_id')->default(0);
                $table->bigInteger('subcategory9_id')->default(0);
                $table->bigInteger('parent_subcategory9_id')->default(0);
                $table->bigInteger('product_id')->unsigned()->index();
                $table->foreign('product_id')->references('id')->on('products');
            });

  1. Models

      class Product extends Model
      {
          use scopeActiveTrait;
    
          protected $fillable = ['company_id', 'id_delivery_vat', 'id_product_vat', 'id_producer', 'name', 'qr_code', 'oe_code', 'enable', 'promo', 'description', 'product_price', 'promo_product_price', 'product_delivery_price', 'quantity', 'url_address'];
          protected $quarded = ['id'];
          public $timestamps = true;
    
          public function categories()
          {
              return $this->belongsToMany(Category::class, 'product_selected_categories', 'product_id', 'category_id');
          }
      }
    
      class ProductCategory extends Model
      {
          use scopeActiveTrait;
    
          protected $guarded = ['id'];
          protected $fillable = ['company_id', 'enable', 'name', 'url_address', 'level', 'parent_id', 'number'];
          public $timestamps = true;
          //protected $table = 'products_category';
    
          public function parent()
          {
              return $this->belongsTo('App\ProductCategory', 'parent_id', 'id');
          }
    
          public function children()
          {
              return $this->hasMany('App\ProductCategory', 'id', 'parent_id');
          }
    
          public function products()
          {
              return $this->belongsToMany(Product::class, 'product_selected_categories', 'category_id', 'product_id');
          }
      }
    
      class ProductSelectedCategory extends Model
      {
          protected $quarded = ['id'];
          protected $fillable = ['subcategory1_id', 'parent_subcategory1_id', 'category_id', 'subcategory2_id', 'parent_subcategory2_id', 'subcategory3_id', 'parent_subcategory3_id', 'subcategory4_id', 'parent_subcategory4_id', 'subcategory5_id', 'parent_subcategory5_id', 'subcategory6_id', 'parent_subcategory6_id', 'subcategory7_id', 'parent_subcategory7_id', 'subcategory8_id', 'parent_subcategory8_id', 'subcategory9_id', 'parent_subcategory9_id', 'product_id' ];
          public $timestamps = false;
      } 
    
    

The above code is a list of my categories (product_categories), list of products (products) and categories assigned to products (product_selected_categories).

I would like to display my product along with the category to which it was added.

I'm trying to do this using the following code:

``` 
    Product::findOrFail($id)
``` 

this code does not work :( The code displays only the product - without information about the category to which the product belongs :(

How to fix it?



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire