login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Active record

Offline marten - 14/06/2010 09:25 (laatste wijziging 14/06/2010 09:44)
Avatar van martenBeheerder Goedemorgen,

Afgelopen weekend ben ik tussen het voetbal kijken door bezig geweest met het maken van een Active Record class voor me projecten. In veel opzichten lijkt deze op degene die CodeIgniter gebruikt. Echter het is afdoende voor de meeste queries (simpele queries).

Echter kom ik nu in een query terecht welke wat uitgebreider is. En dan vooral de where:

Schriftelijk ziet mijn where er als volgt uit:

Geef mij x results van tabel1 where
plaatsnaam = amsterdam OF plaatsnaam = rotterdam OF plaatsnaam = Den Haag
EN
straatnaam LIKE kerkstraat

Met de Active Record kan ik prima de OR en AND relaties voor een kolom meegeven, echter de koppeling tussen de twee kolomnamen en de daarbij behorende AND relatie krijg ik in het huidige systeem niet voor elkaar.

Mijn where method:
  1. public FUNCTION WHERE($key, $value = NULL, $not = 0, $type = 'AND ') {
  2. IF (! is_array ( $key )) {
  3. $key = array ($key => $value );
  4. }
  5.  
  6. foreach ( $key AS $rowKey => $valueKey ) {
  7. $prefix = (count ( $this->aWhere ) == 0) ? '' : $type;
  8. IF (is_null ( $valueKey )) {
  9. $rowKey .= ' IS NULL';
  10. }
  11. $valueKey = ' ' . $valueKey;
  12. IF($not == 1) {
  13. $rowKey .= ' !=';
  14. } else {
  15. $rowKey .= ' =';
  16. }
  17.  
  18. $this->aWhere [] = $prefix . $rowKey . $valueKey;
  19. }
  20. }


Vervolgens loop ik in mijn get functie door alle arrays van LIKE, Having, orderby etc.
Where.
  1. IF (count ( $this->aWhere ) > 0 || count ( $this->aLike ) > 0) {
  2. $sQuery .= "\n";
  3. $sQuery .= "WHERE ";
  4. }


Ik wil het liefst een betere functie hiervan maken en niet de complete SQL where inschieten.


Edit
Ik zit er aan te denken om de where method aan te roepen als een array voor nested statements. En dan bij de array een type mee te geven:

  1. $this->where(array(
  2. array(plaatsnaam => 'amsterdam', type = 'OR'),
  3. array(plaatsnaam => 'rotterdam', type = 'OR'),
  4. array(plaatsnaam => 'den Haag', type = 'OR')
  5. type => 'AND');
  6.  
  7. $this->where(array(
  8. array(straatnaam => 'kerkstraat', type = 'OR'),
  9. array(straatnaam => 'hoofdstraat', type = 'OR'),
  10. array(straatnaam => 'Kalverstraat', type = 'OR')
  11. type => 'AND');
  12.  
  13.  
  14. $this->where('persoon', 'Pietje', 0, 'OR');


Resultaat:

  1. WHERE (plaatsnaam = 'amsterdam' OR plaatsnaam = 'rotterdam' OR plaatsnaam = 'Den Haag') AND
  2. (straatnaam = 'kerkstraat' OR straatnaam = 'hoofdstraat' OR straatnaam = 'Kalverstraat') OR persoon = 'Pietje'


Ziet iemand een betere oplossing?

Groeten,
Marten

1 antwoord

Gesponsorde links
Offline Joost - 14/06/2010 21:23
Avatar van Joost PHP expert Werken met IN() van MySQL in dit geval..
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.183s