Может ли кто -нибудь объяснить ORM, используемый в текущих веб -структурах?
-
26-10-2019 - |
Вопрос
Я очень новичок в Орме, и я как бы понимаю определение. Путаница начинается, когда я пытаюсь реализовать отношения.
Предположим, у меня есть эти две таблицы.
Таблица продуктов:
+-------------+--------------+------+-----+---------+----------------+
| 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 в этом случае.
Решение
В FuelPhp вы можете использовать Orm Simpli определить отношение в файле модели:
Model/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,
)
);
}
Model/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']
Другие советы
Примером в несколько рельс-пути было бы:
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...>]
Это не полный код ни в коем случае, но, надеюсь, вы получите эту идею.