استظافة مجانية مع نسخة البلوشوب
تواصل مع المبيعات
Sales.metjar
+97313343321
المنتجات
الخدمات
مراجع
تابعونا على تويتر
Object Relational Mapping « قاعدة البيانات

للرجوع للقائمة الرئيسية إضغط هنا.

مخطط الكائن العلائقية (بالإنجليزية object-relational mapping  ORM) هي تقنية برمجة الكمبيوتر تعمل على إنشاء الوهم لـ قاعدة بيانات الكائن من قاعدة البيانات المترابطة من خلال تعريف تعيينات بين قاعدة البيانات, كائنات البيانات واللغة المستخدمة.

يمكننا تسمية "التوافق بين العالم والعالم الكائن العلائقية   المصدر wikipedia

كيفية تطبيق ORM في المتجر الالكتروني اعتمادا على AmhsoftFrameWork

لكل جدول table في قاعدة البيانات يتم انشاء كائن class

CREATE TABLE IF NOT EXISTS `category_table` (
  `id` bigint(31) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `parent` int(11) NOT NULL DEFAULT '0',
  `sort_id` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
)
class Category extends DbObject {

  var $id;
  var $name;
  var $parent;
  var $sortId;

  public function Category($id = null, $name = null, $parent = null, $sortId = null) {
    $this->id = $id;
    $this->name = $name;
    $this->description = $description;
    $this->parent = $parent;
    $this->sortId = $sortId;
    $this->state = $state;
    parent::DbObject();
  }

/**
   *  Setup Category
   */
  public function setup() {
    $this->table = "category_table";
    $this->_fields = array("id" => "rubrik_id",
        "name" => "rubrik_name",
        "parent" => "parent",
        "sort_id" => "sortId",
        "state" => "active");

    $this->identifier = "id";
  }

/**
   * Sets Category id.
   * @param Integer $id
   */
  public function setId($id) {
    $this->id = intval($id);
  }

  /**
   * Gets Category name.
   * @param String $name
   */
  public function setName($name) {
    $this->name = $name;
  }

/**
   * Sets Category parent.
   * @param String $parent
   */
  public function setParent($parent) {
    $this->parent = $parent;
  }
 /**
   * Gets Category id.
   * @return Integer $id
   */
  public function getId() {
    return $this->id;
  }

  /**
   * Gets Category name.
   * @return String $name
   */
  public function getName() {
    return $this->name;
  }

/**
   * Gets Category parent.
   * @return String $parent
   */
  public function getParent() {
    return $this->parent;
  }

 /**
   * CheckCategory hasKinds
   * @return Integer
   */
  public function hasKinds() {
    $cat = new Category();
    $cat->where("parent = " . $this->getId());
    return ($cat->getCount() > 0);
  }

  /**
   * Gets Category kindsCount.
   * @return Integer
   */
  public function getKindsCount() {
    $cat = new Category();
    $cat->where("parent = " . $this->getId());
    return $cat->getCount();
  }

  /**
   * Gets Category kinds.
   * @return type
   */
  public function getKinds() {
    $cat = new Category();
    $cat->where("parent = " . $this->getId());
    $cat->orderBy("sort_id ASC");
    return $cat->fetch();
  }
}


طريقة الاستخدام

$category = new Category(null, 'category name', null, 0); 
$category->save();

//OR using setter
$category = new Category();
$category->setName('category name');
$category->setSortId(0);
$category->save();

//produced sql:
INSERT INTO category(id, name. parent, sort_id) VALUES (NULL, 'category name', NULL, 0);

//how to handle update
$category = new Category(3);
$categoy->setName('New Category Name);
$category->update();

//produced sql:
UPDATE category SET name = 'New Category Name' WHERE id = 3;

//how to handle select
$category = new Category();
$categories = $category->fetch();

//how to handle select with where statement, order by statement, limit statement
$category = new category();
$category->where('id > 3');
$cateogry->orderBy('sort_id');
$category->limit(5);
$categories = $category->fetch();

//fech as xml or json
$xmlstring = $category->fetchAsXml();
$json_text = $category->fetchAsJson();


العلاقات بين الجداول One To Many, Many To Many One To One

مثال حي في المتجر الالكتروني، العلاقة بين القسم والمنتجات، لكل قسم عدة منتجات يعني One To Many

public function setup() {
    $this->table = "rubrik";
    $this->_fields = array("id" => "rubrik_id",
        "name" => "rubrik_name",
        "description" => "description",
        "parent" => "top_rubrik",
        "sortId" => "sortId",
        "state" => "active");

    $this->identifier = "rubrik_id";
    $this->defineOneToMany("products", "categorie_id", "Product", false);
  }

//products: array in clsss category
//category_id: foreign key in product table
//Category: Category class has relation with Product Class
//false: on update cascade

هذ التعديل يكفي لربط العلاقة بين المنتج والقسم و يمكن للمبرمج مناداة المنتجات بكل سهولة

$category = new Category();
$cat = $category->fetchById(5);
$products = $cat->getProducts();