Может ли кто-нибудь объяснить ORM, используемый в современных веб-фреймворках? - PullRequest
1 голос
/ 25 июля 2011

Я очень новичок в ORM и вроде понимаю определение.Путаница начинается, когда я пытаюсь реализовать отношения.

Предположим, у меня есть эти две таблицы.

Таблица продуктов:

+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| brand_id    | int(11)      | YES  |     | NULL    |                |
| name        | varchar(100) | YES  |     | NULL    |                |
| description | text         | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+

Брендтаблица имен:

+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| name       | varchar(100) | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

Как настроить модели с помощью $_has_many $_belongs_to, чтобы при выполнении операции $product1 = Model_Product::find('first'); он также возвращал название бренда, как в соединениях SQL.

Или я поступаю неправильно.

Это не обязательно должно быть специфично для fuelphp, я просто хочу, как настроить ORM в этом случае.

Ответы [ 2 ]

2 голосов
/ 09 сентября 2011

В fuelphp вы можете использовать ORM, просто определите отношение в файле модели:

модель / brand.php

class Model_Brand extends Orm\Model {

   protected static $_has_many = array(
        'products' => array(
            'model_to' => 'Model_Product',
            'key_from' => 'id',
            'key_to' => 'brand_id',
            'cascade_save' => false,
            'cascade_delete' => true,
        )
    );
}

модель / product.php

class Model_Product extends Orm\Model {
    protected static $_belongs_to = array('brand');
}

Когда вы выполните $brand = Model_Brand::find('first');, вы можете получить доступ к списку продуктов с помощью $brand['products']

Когда вы выполните $product = Model_Product::find('first');, вы можете получить доступ к бренду с помощью $product['brand']

1 голос
/ 25 июля 2011

Пример в некотором смысле Rails-ish будет:

class Brand
  has_many :products
end

class Product
  belongs_to :brand
end

product = Product.first
product.brand
=> <#Brand...>
brand = Brand.first
brand.products
=> [<#Product...>, <#Product...>]

Это ни в коем случае не полный код, но, надеюсь, вы поймете идею.

...