Qualcuno potrebbe spiegare l'ORM utilizzato nel framework web attuali?
-
26-10-2019 - |
Domanda
Sono molto nuovo per ORM e io tipo di comprendere la definizione. La confusione inizia quando cerco di implementare le relazioni.
Supponiamo che io ho queste due tabelle.
Tavolo Prodotti:
+-------------+--------------+------+-----+---------+----------------+
| 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 | |
+-------------+--------------+------+-----+---------+----------------+
Brand tabella nomi:
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(100) | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
Come faccio a impostare i modelli con $_has_many
$_belongs_to
in modo che quando faccio $product1 = Model_Product::find('first');
Esso restituisce anche il nome del brand, come in SQL unisce.
O sono io che vado su questo il modo sbagliato.
Questo non deve essere specifico per fuelphp, voglio solo come ORM di configurazione in questo caso.
Soluzione
In fuelphp è possibile utilizzare ORM semplificazione definire la relazione nel file del modello:
modello / 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,
)
);
}
modello / Product.php
class Model_Product extends Orm\Model {
protected static $_belongs_to = array('brand');
}
Quando si esegue $brand = Model_Brand::find('first');
è possibile accedere alla lista dei prodotti con $brand['products']
Quando si esegue $product = Model_Product::find('first');
è possibile accedere al marchio con $product['brand']
Altri suggerimenti
Un esempio in un modo un po 'Rails-ish potrebbe essere:
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...>]
Non si tratta di codice completo con qualsiasi mezzo, ma si spera si otterrà l'idea.