Pogledajte određenu poruku
Staro 30. 09. 2012.   #5
salebab
profesionalac
Qualified
 
Avatar salebab
 
Datum učlanjenja: 09.11.2006
Lokacija: Beograd
Poruke: 102
Hvala: 19
21 "Hvala" u 18 poruka
salebab is on a distinguished road
Pošaljite ICQ poruku za salebab Pošaljite poruku preko MSN za salebab
Default

Pre svega hvala za review, pokusacu da opravdam neke odluke:

Query builder nije ovde da bi se ubrzalo pisanje koda tako sto npr necu morati da kucam join("INNER JOIN table ON table.user_id = users.user_id") vec samo join("table", "table.user_id = users.user_id"), kao sto je kod CI ActiveRecord klase. Ideja je da query string prebacim u objekat, tako da taj jedan query mogu graditi iz vise metoda, evo ukratko primera nekog modela:

PHP kôd:
<?php

class PostModel
{

    
/**
     * @var DBQuery
     */
    
private $query;

    function 
__construct() {

        
$this->query DB::getInstance()->createQuery();
        
$this->query->select("p,*")
            ->
from("posts p")
            ->
join("INNER JOIN users u ON u.user_id = p.user_id");
    }

    function 
getPosts($args = array()) {

        
$args array_merge(array(
            
"posts_per_page" => 10,
            
"is_active" => 1
            
), $args
        
);

        
$this->query->limit($args["posts_per_page"]);
        
$this->query->where("p.is_active = ?"$args["is_active"]);

        return 
$this->query->execute()->fetchCollection();
    }

    function 
getPostsByUserId($user_id$args = array()) {
        
$this->query->where("p.user_id = ?"$user_id);
        return 
$this->getPosts($args);
    }
}
Nadam se da je sada jasnije i da mozes da shvatis smisao tako neke klase.

Da, DB je samo implementacija singleton paterna kako ne bi uvek prosledjivao db objekat. Singleton u ovakvim slucajevima i ima najvise smisla i tu ga je najpozeljnije i koristiti.

Sto se include/require, nisam hteo da koristim autoloadere da ne bih bezveze komplikovao kod, zelim da bude sto jednostavnije a i kompatibilno sa 5.2 verzijom.

UTF8 je default vrednost, ali se moze prepisati tako se DBWrapperu prosledi u poslednjem $options parametru druga vrednost za PDO::MYSQL_ATTR_INIT_COMMAND. Ali da, probacu da nadjem elegantnije resenje za ovo.
__________________
www.salebab.net
salebab je offline   Odgovorite uz citat