¿Alguien podría explicar el ORM utilizado en los marcos web actuales?
-
26-10-2019 - |
Pregunta
Soy muy nuevo en Orm y entiendo la definición. La confusión comienza cuando intento implementar relaciones.
Supongamos que tengo estas dos tablas.
Tabla de productos:
+-------------+--------------+------+-----+---------+----------------+
| 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 | |
+-------------+--------------+------+-----+---------+----------------+
Tabla de marcas:
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(100) | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
¿Cómo configuro los modelos con $_has_many
$_belongs_to
para que cuando lo hago $product1 = Model_Product::find('first');
También devuelve el nombre de la marca, como en SQL se une.
¿O voy por esto de la manera incorrecta?
Esto no tiene que ser específico para Fuelphp, solo quiero cómo configurar Orms en este caso.
Solución
En Fuelphp, puede usar ORM Simpli Definir la relación en el archivo del modelo:
modelo/marca.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,
)
);
}
modelo/producto.php
class Model_Product extends Orm\Model {
protected static $_belongs_to = array('brand');
}
Cuando actuarás $brand = Model_Brand::find('first');
Puede acceder a la lista de productos con $brand['products']
Cuando actuarás $product = Model_Product::find('first');
puedes acceder a la marca con $product['brand']
Otros consejos
Un ejemplo de una manera algo rieles sería:
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...>]
Esto no es un código completo de ninguna manera, pero espero que obtenga la idea.