Skip to content

Instantly share code, notes, and snippets.

@atayahmet
Last active July 17, 2016 18:48
Show Gist options
  • Save atayahmet/261e953ca0d8878773049fce333bb83d to your computer and use it in GitHub Desktop.
Save atayahmet/261e953ca0d8878773049fce333bb83d to your computer and use it in GitHub Desktop.
ecommerce relations

Ürün İlişkilendirme

Yeni bir ürün eklendiğinde bu ürün için gerekli olabilecek ilgili ürünleri kullanıcıya önerme işlemi için aşağıdaki gibi bir yol izlenebilir.

  1. Ürün eklenir.
  2. Gerekli ürünler listesi oluşturulur ve sonrasında ürünler bu listeye eklenir.
  3. Oluşturulan yada var olan ilişkili ürün listesi ana ürüne tanımlanır.

Tablo/Model İlişkileri

Products:

id name
1 Ev Tipi Matkap
2 5mm Matkap Ucu
3 10mm Matkap Ucu
4 İş Gözlüğü
5 İş İş Eldiveni
6 Masa Avizesi
7 Kırmızı Avize Ampülü
8 Sanayi Tipi Matkap

Product Model:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    public function requirementList()
    {
        return $this->belongsToMany(Requirement::class, 'product_requirement_relation', 'requirement_id', 'product_id')
            ->withTimestamps();
    }
}

Category:

id name
1 Yapı Malzemeleri

Category Model:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    protected $table = 'categories';
}

Requirements

id name category_id
1 Matkap için ilgili ürünler 1

Requirement Model:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Requirement extends Model
{
    protected $fillable  = ['name', 'category_id'];

    public function products()
    {
        return $this->belongsToMany(Product::class, 'require_product', 'require_id', 'product_id')
            ->withTimestamps();
    }
}

Requirement List (pivot)

id require_id product_id
1 1 2
2 1 3
3 1 4
4 1 5

Product Requirement Relation (pivot)

id requirement_id product_id
1 1 1
2 1 8

Aşağıdaki sorgu ile id'i 1 olan bir ürünün tüm requirement listesini ürünleriyl birlikte alalım.

<?php

App\Product::with('requirementList.products')->find(1)

Sorgu sonucu:

Product {#156 
  #connection: null
  #table: null
  #primaryKey: "id"
  #keyType: "int"
  #perPage: 15
  +incrementing: true
  +timestamps: true
  #attributes: array:4 []
  #original: array:4 []
  #relations: array:1 [
    "requirementList" => Collection {#160 
      #items: array:1 [
        0 => Requirement {#163 
          #fillable: array:2 []
          #connection: null
          #table: null
          #primaryKey: "id"
          #keyType: "int"
          #perPage: 15
          +incrementing: true
          +timestamps: true
          #attributes: array:5 []
          #original: array:9 []
          #relations: array:2 [
            "pivot" => Pivot {#162 }
            "products" => Collection {#178 
              #items: array:4 [
                0 => Product {#174 
                  #connection: null
                  #table: null
                  #primaryKey: "id"
                  #keyType: "int"
                  #perPage: 15
                  +incrementing: true
                  +timestamps: true
                  #attributes: array:4 []
                  #original: array:8 [
                    "id" => 2
                    "name" => "Sibyl Orn"
                    "created_at" => "2016-07-17 17:43:06"
                    "updated_at" => "2016-07-17 17:43:06"
                    "pivot_require_id" => 1
                    "pivot_product_id" => 2
                    "pivot_created_at" => "2016-07-17 18:07:13"
                    "pivot_updated_at" => "2016-07-17 18:07:13"
                  ]
                  #relations: array:1 [
                    "pivot" => Pivot {#173 }
                  ]
                  #hidden: []
                  #visible: []
                  #appends: []
                  #fillable: []
                  #guarded: array:1 []
                  #dates: []
                  #dateFormat: null
                  #casts: []
                  #touches: []
                  #observables: []
                  #with: []
                  #morphClass: null
                  +exists: true
                  +wasRecentlyCreated: false
                }
                1 => Product {#175 }
                2 => Product {#176 }
                3 => Product {#177 }
              ]
            }
          ]
          #hidden: []
          #visible: []
          #appends: []
          #guarded: array:1 []
          #dates: []
          #dateFormat: null
          #casts: []
          #touches: []
          #observables: []
          #with: []
          #morphClass: null
          +exists: true
          +wasRecentlyCreated: false
        }
      ]
    }
  ]
  #hidden: []
  #visible: []
  #appends: []
  #fillable: []
  #guarded: array:1 []
  #dates: []
  #dateFormat: null
  #casts: []
  #touches: []
  #observables: []
  #with: []
  #morphClass: null
  +exists: true
  +wasRecentlyCreated: false
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment