Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Active Record - where
ayeo
post 15.04.2008, 23:11:25
Post #1





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


W celach edukacyjnych piszę sobie coś jakby Active Record. Zastanawiam się jak to jest z klauzulą WHERE w innych tego typu rozwiązaniach. Jak na razie to widziałem tylko w Code Igniter coś takiego:

$AR->where($nazwa_kolumy, $wartość);

co oznacza WHERE nazwa_kolumny = wartość. Można oczywiście wywołać tą metodę wielokrotnie co nam połączy poszczególne zapytania. Problemem jest przekazywanie warunków typu WHERE nazwa_kolumny > wartość lub jakieś bardziej skomplikowane zapytania typu:

WHERE (kolumna1 > 10 OR kolumna2 < 100) AND kolumna3 = 1

Można to niby rozwiązać przez przekazywanie całego warunku do metody where(); jednak stwarza to dodatkowe problemy. Jakie są wasze propozycje i jak Wy rozwiązujecie coś takiego u siebie?

Z góry dziękuję za wszelkie rady/wskazówki/sugestie. Pozdrawiam!


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
sobstel
post 15.04.2008, 23:20:25
Post #2





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Na wzór prepared statements, tj. where('age > ?', $age);


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
LBO
post 16.04.2008, 05:54:49
Post #3





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


eZComponents udostępnia specjalny obiekt ezcQueryExpression uzbrojone w odpowiedni zestaw metod:

  1. <?php
  2. $q->select( '*' )->from( 'table' )
  3.  
  4.  
  5. // WHERE id = 1
  6. ->where( $q->expr->eq( 'id', $q->bindValue( 1 ) ) );
  7.  
  8. // WHERE id <> 1
  9. ->where( $q->expr->neq( 'id', $q->bindValue( 1 ) ) );
  10.  
  11. // WHERE id > 1
  12. ->where( $q->expr->gt( 'id', $q->bindValue( 1 ) ) );
  13.  
  14. // WHERE id IN (1, 2, 3)
  15. ->where( $q->expr->in( 'id', 1, 2, 3 ) );
  16.  
  17. // etc
  18. ?>
Go to the top of the page
+Quote Post
Sedziwoj
post 16.04.2008, 09:37:11
Post #4





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


A może coś na wzór Propela?
  1. <?php
  2. $c = new Criteria();
  3. //parametry: nazwa kolumny, wartość, metoda porównania
  4. $c->add( ProArticlePeer::TITLE, '%'.$strTitle.'%', Criteria::LIKE );
  5. $cton1 = $c->getNewCriterion( ProArticlePeer::AUTHOR, '%'.$strAuthor.'%', Criteria::LIKE );
  6. $cton2 = $c->getNewCriterion( ProArticlePeer::NUMBER, $intNumber, Criteria::LESS_THAN );
  7. $cton3 = $c->getNewCriterion( ProArticlePeer::CONTENT, '%'.$strContent.'%', Criteria::LIKE );
  8. $cton1->addOr($cton2);
  9. $cton1->addOr($cton3);
  10. $c->add($cton1);
  11. ?>

Trochę zawikłane, ale ogólnie to co jest w nawiasach jest jako osobny obiekt Criterion, który się dodaje na pewnych warunkach do innego itd. ...

EDIT:
  1. WHERE ( ( author LIKE '%$strAuthor%' OR number < $intNumber ) OR content LIKE '%$strContent%' ) AND title LIKE '%$strTitle%'


Ten post edytował Sedziwoj 16.04.2008, 09:41:19


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
ayeo
post 16.04.2008, 10:00:18
Post #5





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


Dziękuję wszystkim za rzeczowe odpowiedzi. Zrobię chyba dodatkowy obiekt Critereia (uproszczony) tak jak w Propelu.


--------------------
Go to the top of the page
+Quote Post
Sedziwoj
post 16.04.2008, 10:38:29
Post #6





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Dokładnie w Propelu masz dwa obiekty Criteria i Criterion, ale w Twoim przypadku byś chciał zrobić coś w stylu Criterion, bo zawiera właśnie cryteria (Criteria ma do tego złączenia, sortowanie, limity, offsety itp.)

EDIT: Głodnym, spacje zjadł biggrin.gif

Ten post edytował Sedziwoj 16.04.2008, 10:39:00


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
ayeo
post 16.04.2008, 10:43:13
Post #7





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


@Sedziwoj, już myślałem, że nowa klawiatura ma defekt biggrin.gif Złączenia, limity, offset robię dodatkowymi metodami w samym AR. Jednak zastanowię się nad rozwiązaniem z Propela. Dzięki za wskazówki!

Ten post edytował ayeo 16.04.2008, 10:44:49


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 19:08