Interesse in Active Record?

Gestart doorOne2xs37 reacties86 weergaven

38 berichten · pagina 1 van 3

One2xs

Bot · Topicstarter

Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Hoi,

Ik heb onlangs mijn eigen php ActiveRecord wrapper geschreven. Voorbeeldje van hoe het allemaal werkt:

[COLOR= #0000BB]<?php

$db_table[/COLOR] [COLOR= #007700]= new[/COLOR] User[COLOR= #007700]([/COLOR]Database[COLOR= #007700]::[/COLOR]getDatabaseWithDefaultAdapter[COLOR= #007700]());[/COLOR]
        
[COLOR= #0000BB]$usr[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$db_table[/COLOR][COLOR= #007700]->[/COLOR]find[COLOR= #007700]([/COLOR][COLOR= #0000BB]1[/COLOR][COLOR= #007700]);[/COLOR] [COLOR= #FF8000]// find user met id = 1[/COLOR]
        
[URL="http://www.php.net/echo"]echo[/URL] [COLOR= #0000BB]$usr[/COLOR][COLOR= #007700]->[/COLOR]username[COLOR= #007700];[/COLOR] [COLOR= #FF8000]// output => raoul[/COLOR]
        
[COLOR= #0000BB]$usr[/COLOR][COLOR= #007700]->[/COLOR]username [COLOR= #007700]=[/COLOR] [COLOR= #DD0000]Piet[/COLOR][COLOR= #007700];[/COLOR]
        
[URL="http://www.php.net/echo"]echo[/URL] [COLOR= #0000BB]$usr[/COLOR][COLOR= #007700]->[/COLOR]username[COLOR= #007700];[/COLOR] [COLOR= #FF8000]// output => Piet[/COLOR]
        
[COLOR= #0000BB]$db_table[/COLOR][COLOR= #007700]->[/COLOR]save[COLOR= #007700]([/COLOR][COLOR= #0000BB]$usr[/COLOR][COLOR= #007700]);[/COLOR] [COLOR= #FF8000]// wijzig de db table[/COLOR]
?>


Die User class stelt dan een database table voor, en die class ziet er zo uit:

[COLOR= #0000BB]<?php[/COLOR]

namespace ApplicationModelDbTable[COLOR= #007700];[/COLOR]

use FrameworkDatabaseDbTableDbTable[COLOR= #007700];[/COLOR]

[URL="http://www.php.net/class"]class[/URL] User extends DbTable
[COLOR= #007700]{[/COLOR]
    [URL="http://www.php.net/public"]public[/URL] [COLOR= #0000BB]$tableName[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000]user[/COLOR][COLOR= #007700];
}[/COLOR]

?>


Jij hoeft dus op zich bijna geen werk te verrichten, dat doet de DbTable class.

Heeft iemand hier interesse in? Het verminderd zelf SQL typen echt wel.

Grt
0
Berichten
308
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Dus als ik het goed begrijp, dan maak je voor iedere tabel een class aan met DbTable als parent-class. Via de find methode zoek je bepaalde records. En kun je dan gebruiken a.d.h.v. properties die de velden moeten voorstellen en/of aanpassen indien de save method wordt aangeroepen.

Ja, ziet er wel handig en gemakkelijk uit smileMaar die find methode, die kan je wss overschrijven neem ik aan ?
0
Berichten
3.074
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Ja, ik heb er wel wat aan.
0
One2xs

Bot · Topicstarter

Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Robbeing schreef:
Dus als ik het goed begrijp, dan maak je voor iedere tabel een class aan met DbTable als parent-class. Via de find methode zoek je bepaalde records. En kun je dan gebruiken a.d.h.v. properties die de velden moeten voorstellen en/of aanpassen indien de save method wordt aangeroepen.

Ja, ziet er wel handig en gemakkelijk uit smileMaar die find methode, die kan je wss overschrijven neem ik aan ?
Ik neem aan dat je andere dingen dan een id wilt vinden? Kan prima.

[COLOR= #0000BB]<?php

$usr[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$db_table[/COLOR][COLOR= #007700]->[/COLOR]find[COLOR= #007700]([/COLOR][URL="http://www.php.net/array"]array[/URL][COLOR= #007700]([/COLOR]
   [COLOR= #DD0000]username[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #DD0000]Piet[/COLOR][COLOR= #007700],[/COLOR]
   [COLOR= #DD0000]age[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #0000BB]16[/COLOR]
[COLOR= #007700]));[/COLOR]

[URL="http://www.php.net/echo"]echo[/URL] [COLOR= #0000BB]$usr[/COLOR][COLOR= #007700]->[/COLOR]username[COLOR= #007700];[/COLOR] [COLOR= #FF8000]// Piet[/COLOR]

?>


toevoeging op 29 december 2012, 16:07:03:
(ik ga het nu mogelijk maken om een rij te droppen en om ook een custom SQL te schrijven, misschien wil je dat wel)
0
Berichten
308
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Raaoul schreef:
Eerdere citaten tonen
Robbeing schreef:
Dus als ik het goed begrijp, dan maak je voor iedere tabel een class aan met DbTable als parent-class. Via de find methode zoek je bepaalde records. En kun je dan gebruiken a.d.h.v. properties die de velden moeten voorstellen en/of aanpassen indien de save method wordt aangeroepen.
Ja, ziet er wel handig en gemakkelijk uit smileMaar die find methode, die kan je wss overschrijven neem ik aan ?

Ik neem aan dat je andere dingen dan een id wilt vinden? Kan prima.

[COLOR= #0000BB]<?php

$usr[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$db_table[/COLOR][COLOR= #007700]->[/COLOR]find[COLOR= #007700]([/COLOR][URL="http://www.php.net/array"]array[/URL][COLOR= #007700]([/COLOR]
   [COLOR= #DD0000]username[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #DD0000]Piet[/COLOR][COLOR= #007700],[/COLOR]
   [COLOR= #DD0000]age[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #0000BB]16[/COLOR]
[COLOR= #007700]));[/COLOR]

[URL="http://www.php.net/echo"]echo[/URL] [COLOR= #0000BB]$usr[/COLOR][COLOR= #007700]->[/COLOR]username[COLOR= #007700];[/COLOR] [COLOR= #FF8000]// Piet[/COLOR]

?>


toevoeging op 29 december 2012, 16:07:03:
(ik ga het nu mogelijk maken om een rij te droppen en om ook een custom SQL te schrijven, misschien wil je dat wel)
Is ook n goed iets, is er n support voor JOINS ? Want dat gebruik ik enorm vaak yummie
0
One2xs

Bot · Topicstarter

Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Joins is wel iets moeilijk, ik kan het zelf amper. Maar gebruik je het echt zo vaak? Anders kan je ook gewoon de ->sql() method gebruiken om zelf wat ingewikkeldere querys te schrijven.
0
Berichten
308
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Via die sql methode is t ook goed winkEn ja gebruik nogal vaak JOINS yummie Bouw altijd mn db zo op.

Maar moet gaan, tot later yummie
0
Berichten
1.544
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Kunnen we hem ergens downloaden? Kan iedereen wat van leren biggrin
0
One2xs

Bot · Topicstarter

Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Jenner schreef:
Kunnen we hem ergens downloaden? Kan iedereen wat van leren biggrin
Ik ben van plan om alle dependencies (Database, DatabaseException, DbTable, DbTableItem, DomainObject, DomainObjectException) binnenkort hier als download te stellen en als heel het framework dan af is komt alles op Git.
0
Berichten
308
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Raaoul schreef:
Eerdere citaten tonen
Jenner schreef:
Kunnen we hem ergens downloaden? Kan iedereen wat van leren biggrin
Ik ben van plan om alle dependencies (Database, DatabaseException, DbTable, DbTableItem, DomainObject, DomainObjectException) binnenkort hier als download te stellen en als heel het framework dan af is komt alles op Git.
Nice, kun je ook kijken om eventueel een DbView te maken voor VIEWS ? Maar normaal gezien zou je a.d.h.v. een DbTable object views kunnen ondersteunen.

Indien je views niet kent, dat zijn gewoon dynamische tabellen die je aanmaakt aan de hand van een query. Als bijvoorbeeld een tabel users hebt, dan kun je een view aanmaken users_active, die d.m.v. een query enkel de actieve users bevat.

Maar zoals ik al eerder zei, normaal gezien zou je DbTable class dat wel ondersteunen omdat views qua select hetzelfde werkt als normale tabellen.
0
One2xs

Bot · Topicstarter

Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Robbeing schreef:
Eerdere citaten tonen
Raaoul schreef:
Eerdere citaten tonen
Jenner schreef:
Kunnen we hem ergens downloaden? Kan iedereen wat van leren biggrin
Ik ben van plan om alle dependencies (Database, DatabaseException, DbTable, DbTableItem, DomainObject, DomainObjectException) binnenkort hier als download te stellen en als heel het framework dan af is komt alles op Git.
Nice, kun je ook kijken om eventueel een DbView te maken voor VIEWS ? Maar normaal gezien zou je a.d.h.v. een DbTable object views kunnen ondersteunen.

Indien je views niet kent, dat zijn gewoon dynamische tabellen die je aanmaakt aan de hand van een query. Als bijvoorbeeld een tabel users hebt, dan kun je een view aanmaken users_active, die d.m.v. een query enkel de actieve users bevat.

Maar zoals ik al eerder zei, normaal gezien zou je DbTable class dat wel ondersteunen omdat views qua select hetzelfde werkt als normale tabellen.
Als je je views ophaalt via normale SQL select statements dan gaat het werken ja. Het enige wat find() doet is

1) een select statement opstellen die naar data zoekt gegeven als paramter in find($what)
2) een DbTableItem object maken en die volzetten met alle data, zoals username enz.
3) de DbTableItem returnen

save() maakt dan een UPDATE query van alle data uit je DbTableItem.
0
Berichten
308
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Ahan,

Dus een DbTableItem is dus eigenlijk een rij, die de velden omzet in properties die je dan kan ophalen en/of eventueel aanpassen en saven. smile
0
One2xs

Bot · Topicstarter

Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Robbeing schreef:
Ahan,

Dus een DbTableItem is dus eigenlijk een rij, die de velden omzet in properties die je dan kan ophalen en/of eventueel aanpassen en saven. smile
Nee, saven doet de DbTable nog steeds door alle items van een DbTableItem uit te lezen en dan dmv een UPDATE query alles aan te passen.
0
Berichten
308
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Raaoul schreef:
Eerdere citaten tonen
Robbeing schreef:
Ahan,
Dus een DbTableItem is dus eigenlijk een rij, die de velden omzet in properties die je dan kan ophalen en/of eventueel aanpassen en saven. smile
Nee, saven doet de DbTable nog steeds door alle items van een DbTableItem uit te lezen en dan dmv een UPDATE query alles aan te passen.
Ja, maar daarvoor moet je toch de save method aanroepen ?
0
One2xs

Bot · Topicstarter

Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Robbeing schreef:
Eerdere citaten tonen
Raaoul schreef:
Eerdere citaten tonen
Robbeing schreef:
Ahan,
Dus een DbTableItem is dus eigenlijk een rij, die de velden omzet in properties die je dan kan ophalen en/of eventueel aanpassen en saven. smile
Nee, saven doet de DbTable nog steeds door alle items van een DbTableItem uit te lezen en dan dmv een UPDATE query alles aan te passen.
Ja, maar daarvoor moet je toch de save method aanroepen ?
Nee, niet in de DbTableItem.

[COLOR= #0000BB]<?php

$db_table[/COLOR] [COLOR= #007700]= new[/COLOR] User[COLOR= #007700](...);[/COLOR]

[COLOR= #0000BB]$user[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$db_table[/COLOR][COLOR= #007700]->[/COLOR]find[COLOR= #007700]([/COLOR][COLOR= #0000BB]1[/COLOR][COLOR= #007700]);[/COLOR]

[COLOR= #0000BB]$user[/COLOR][COLOR= #007700]->[/COLOR]username [COLOR= #007700]=[/COLOR] [COLOR= #DD0000]Iets[/COLOR][COLOR= #007700];[/COLOR]

[COLOR= #0000BB]$db_table[/COLOR][COLOR= #007700]->[/COLOR]save[COLOR= #007700]([/COLOR][COLOR= #0000BB]$user[/COLOR][COLOR= #007700]);[/COLOR]
?>


Zoals je ziet saved de DbTable nog steeds en niet een DbTableItem ($user).
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren