Quelqu'un pourrait-il expliquer l'ORM utilisé dans les frameworks web actuels?
-
26-10-2019 - |
Question
Je suis très nouveau pour ORM et je sorte de comprendre la définition. La confusion commence lorsque je tente de mettre en œuvre les relations.
Supposons que j'ai ces deux tableaux.
de table:
+-------------+--------------+------+-----+---------+----------------+
| 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 | |
+-------------+--------------+------+-----+---------+----------------+
Marque table noms:
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(100) | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
Comment puis-je configurer les modèles avec $_has_many
$_belongs_to
de sorte que lorsque je fais $product1 = Model_Product::find('first');
Il renvoie également le nom de la marque, comme dans les jointures SQL.
Ou vais-je sur ce dans le mauvais sens.
Cela ne doit pas être spécifique à FuelPHP, je veux juste comment ORM de configuration dans ce cas.
La solution
Dans FuelPHP vous pouvez utiliser ORM simpli définir la relation dans le fichier modèle:
modèle / 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,
)
);
}
modèle / product.php
class Model_Product extends Orm\Model {
protected static $_belongs_to = array('brand');
}
Lorsque vous allez effectuer $brand = Model_Brand::find('first');
vous pouvez accéder à la liste des produits avec $brand['products']
Lorsque vous allez effectuer $product = Model_Product::find('first');
vous pouvez accéder à la marque avec $product['brand']
Autres conseils
Un exemple d'une manière un peu Rails-ish serait:
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...>]
Ce n'est pas un code complet par tout moyen, mais nous espérons que vous aurez l'idée.