Newsgroup: it.comp.www.php
Titolo: Kohana, ORM e Model

Qualche d'uno di voi usa Kohana?
Mi trovo in una buffa situazione.
Ho un controller di nome "Car" che deve interrogare
una tabella di nome "cars"
Al momento ho fatto un Model di nome "Car", al singolare,
che si interfaccia in automatico alla tabella "cars" al
plurale. Questo l'ho fatto con:
class Model_Car extends ORM
e funziona.
Ora, però, dovrei creare un model con lo stesso nome, che
estenda il model base di Kohana di nome "Model"
Come esco da qui? O estendo l'ORM o estendo il Model e vorrei
evitare di avere due model di cui uno con il nome strano.
Devo lavorare sulla tabella cars e vorrei avere il model
di tale nome, ma non posso estendere due classi per volta.
Ho notato questa cosa perchè il model base di nome Model
estende già le classi di astrazione Database, ma non sono
un ORM, e vorrei usare quest'ultimo.
O lavoro dentro il mio model che estende ORM (però Kohana
consiglia di estendere Model come base e non ORM) oppure non
so come fare.
-- 
Non tocca a noi dominare tutte le maree del mondo,
il nostro compito è di fare il possibile per la
salvezza degli anni nei quali viviamo,
sradicando il male dai campi che conosciamo.

Si vede che la Car ha fatto un tragico incidente in autostrada... ;P

 Si vede che la Car ha fatto un tragico incidente in autostrada... ;P
LOL, questo spiegherebbe anche il tuo problema.
-- 
Non tocca a noi dominare tutte le maree del mondo,
il nostro compito č di fare il possibile per la


 avere due model di cui uno con il nome strano.
Non ho capito esattamente se ti serve l'ereditarieta` multipla o se i due 
model che ti servono devono essere distinti.
Nel secondo caso, ti dovrebbe bastare creare un'altra classe con nome 
diverso che estende Model.
Nel primo caso, non essendoci ereditarieta` multipla, usa la composizione:
class Model_Car extends ORM
{
 protected $_model;
 public function __construct()
 {
  $this->_model = new Model();
 }
 public function funzioneDiModel($par)
 {
  return $this->_model->funzioneDiModel($par);
 }
 ...
}
In pratica meta` della tua classe sara` un "proxy" verso le vere funzioni 
pubbliche (con lo stesso nome) del Model di Kohana.
La rogna e` che non puoi accedere alle protected, ma lo puoi aggirare 
facendo un vero proxy di Model e wrappando le funzioni protected con 
delle funzioni public, e poi fare la composizione con la tua classe.
Bye.

 model che ti servono devono essere distinti.
Sinceramente non lo so.
Kohana consiglia di usare Model come base per creare i Model.
Io però voglio usare un ORM.
Non conosco molto Kohana, è il primo progetto che faccio
con esso e non so dirti se ORM comprende già tutte le features
di Model (ovvero ORM è un Model evoluto) o se son due cose
differenti con Model che ha determinati metodi ed ORM che ne ha
altri.
Non vorrei perdere alcune features di Model usando ORM.
Sinceramente non credo, Model è veramente una classe piccolissima,
quasi vuota.

 Io però voglio usare un ORM.
Kohana dovrebbe già avere dei meccanismi di ORM propri, forse ti 
conviene cercare nella documentazione.

 conviene cercare nella documentazione.
Sto usando proprio l'ORM di Kohana.
Ma Kohana dispone sia di una classe "Model" da usare come
base per i model, sia di una classe ORM da usare come
base per un Model ORM.
Non ho capito se una sostituisce l'altra.


 Non ho capito se una sostituisce l'altra.
Guarda i sorgenti e controlla se class ORM extends Model (anche 
indirettamente) o no :)
Bye.

 indirettamente) o no :)
No. non lo fa, è la prima cosa che ho verificato, per questo
ho chiesto.
Ma il problema è facilmente risolvibile usando il model come
mera interfaccia per il database ma bramante non è dello
stesso parere.
Usando il model come interfaccia, basta estendere ORM e si
risolve.


 risolve.
guarda non conosco affatto Kohana, comunque non ho mai detto che
non sono daccordo nel far fare ad un model il solo interfaccia
con il db, anzi in molte occasioni i miei model fanno solo quello.
prendi un qualsiasi CRUD (il tuo guestbook "semplice" del trhead
precedente) in quel caso un model fa solo da interfaccia con il
db, cioe prende i dati dal controller li legge/scrive nel db e basta.
ma un CRUD appunto nella maggior parte dei casi non ha una logica
complessa dietro non fa elaborazioni con i dati, si limita a
leggere e scrivere gli stessi.
Ciao
-- 
Postato da Virgilio Newsgroup: lo usi da web ma con le funzioni del newsreader 
http://newsgroup.virgilio.it
Gerarchie it, italia, it-alt, tin, it.binari. Unico!