query raw aql in framework con ORM basato su pattern Active Record

0

Uso il framework yii che implementa il pattern Active Record come base ORM. Ha una classe CActiveRecord che è una classe wrapper di tabella con attributi che riflettono le colonne della tabella. Quindi ogni oggetto di questa classe rappresenta una riga del database.

Wiki dice del pattern Active Record:

Active record is an approach to accessing data in a database

e

A database table or view is wrapped into a class. Thus, an object instance is tied to a single row in the table.

Fin qui tutto bene.

Ma dove dovrei inserire una query sql raw complessa che recupera i dati statistici, ad esempio?

E, più in generale, dove dovrei mettere i metodi che recuperano alcuni dati che non possono essere un oggetto record attivo (come i dati recuperati con query di aggregazione) o se so che non voglio recuperare un oggetto ma una matrice invece per esempio ?

    
posta Zapadlo 13.09.2013 - 00:30
fonte

2 risposte

1

Suggerirei di creare una classe separata per questo scopo. Se metti tutta questa logica in una classe di registrazione attiva, molto presto diventerà di dimensioni abbastanza prominenti.

Il secondo passo è non usare il framework yii, poiché il record attivo è il peggiore di tutti i pattern ORM. Il pattern data-mapper è molto meglio poiché separa la logica e le query del database.

Il terzo passaggio è non utilizzare l'ORM poiché è un anti-pattern stesso.

    
risposta data 20.10.2017 - 19:42
fonte
1

Il modello di record attivo non copre l'utilizzo di query SQL complesse. Per consentire che il pattern record attivo sia combinato con un pattern che fornisce l'accesso alle tabelle del database come il pattern del repository. Un esempio di questo sarebbe Doctrine 1.x che ha due classi diverse per rappresentare una riga e una tabella.

Poiché Yii fornisce solo una classe modello, posso supporre che questo metodo debba essere implementato nella classe CActiveRecord. Implementa già un sacco di metodi di ricerca, quindi penso che sia totalmente accettabile.

    
risposta data 13.09.2013 - 09:03
fonte

Leggi altre domande sui tag