Temat: Dziedziczenie - przełożenie obiektów na bazę
Piotr P.:
Co się dzieje gdy dziedziczenie odbywa sie na poziomie klasy *i* na poziomie bazy? Na przykład:
Samochod.insert(); /* ID = X */
Produkt.delete(X);
Rower.insert(); /* ID = Y */
Produkt.update(Y);
jezeli dane trzymasz w kilku tabelach to robisz miedzy nimi relacje za pomoca kluczy obcych i ustawiasz kaskadowe usuwanie.
wtedy po Twoim: Produkt.delete(X), zostanie usuniety rekord z tabeli glownej + rekordy z innych tabeli (np: rekord z profilem obiektu, lub rekordy z tablicy referencyjnej z cechami).
imho jezeli klasa produkt to manager obiektow to taki sposob troche smierdzi bo jest malo wygodny.
ogolnie ja bym sprobowal zrobic to w mniej wiecej taki sposob:
class Object extends Doctrine_Record
{
public function setTableDefinition()
{
$this->setTableName('objects');
/// Jakas tam nazwa obiektu.
$this->hasColumn('name', 'string');
}
public function setUp()
{
/// Zwraca kolekcje cech dla obiektu.
$this->hasMany('Object_Property as properties', array(
'local' => 'id',
'foreign' => 'object_id',
'onDelete' => 'CASCADE'
));
}
}
class Object_Property extends Doctrine_Record
{
public function setTableDefinition()
{
$this->setTableName('objects_properties');
/// Nazwa cechy.
$this->hasColumn('name', 'string');
/// Wartosc cechy.
$this->hasColumn('value', 'string');
/// Id obiektu do ktorego nalezy cecha.
$this->hasColumn('object_id', 'integer');
}
public function setUp()
{
/// Relacja z obiektem.
$this->hasOne('Object as object', array(
'local' => 'object_id',
'foreign' => 'id'
));
}
}
i wtedy moge zrobic np:
class Samochod extends Object { /.../ }
class Rower extends Object { /.../ }
i uzywanie np:
$samochod = new Samochod();
$samochod->name = 'Jakas zajebista fura';
$samochod->properties[0]->name = 'rozmiar kola';
$samochod->properties[0]->value = (string) 123;
$samochod->properties[1]->name = 'spalanie na 100km';
$samochod->properties[1]->value = 'tyle co czlog';
$samochod->save();
$rower = new Rower();
/.../
$rower->delete(); /// wywala wszystkie rekordy zwiazane z rowerem.
moglem cos pojeb%c ale mniej wiecej oto mi chodzilo :P
Łukasz Cepowski edytował(a) ten post dnia 19.02.09 o godzinie 12:46