Könnte jemand das in aktuelle Webrahmen verwendete Orm erklären?
-
26-10-2019 - |
Frage
Ich bin sehr neu in Orm und verstehe die Definition irgendwie. Verwirrung beginnt, wenn ich versuche, Beziehungen zu implementieren.
Angenommen, ich habe diese beiden Tabellen.
Produkttabelle:
+-------------+--------------+------+-----+---------+----------------+
| 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 | |
+-------------+--------------+------+-----+---------+----------------+
Markennamen Tabelle:
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(100) | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
Wie richte ich die Modelle mit $_has_many
$_belongs_to
Also, wenn ich es tue $product1 = Model_Product::find('first');
Es gibt auch den Namen der Marke zurück, wie in SQL Joins.
Oder gehe ich falsch vor.
Dies muss nicht spezifisch für FuelPhP sein, ich möchte nur, wie man Ormen in diesem Fall einstellt.
Lösung
In FuelPhP können Sie die ORM -Simpli verwenden, um die Beziehung in der Modelldatei zu definieren:
Modell/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,
)
);
}
Modell/product.php
class Model_Product extends Orm\Model {
protected static $_belongs_to = array('brand');
}
Wenn Sie ausführen $brand = Model_Brand::find('first');
Sie können auf Liste der Produkte zugreifen $brand['products']
Wenn Sie ausführen $product = Model_Product::find('first');
Sie können auf die Marke zugreifen mit $product['brand']
Andere Tipps
Ein Beispiel in einer gewissen Rails-ish-Art wäre:
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...>]
Dies ist keineswegs vollständiger Code, aber hoffentlich bekommen Sie die Idee.