Nejste přihlášen(a)
Toto téma zakládám bych ušetřil čas a nervy všem, co hledají
řešení jako já.
Líbilo se mi DibiDataSource, ale moje požadavky byly:
Má to nevýhodu, že je nutné v DibiFluent upravit atribut clauses z private na protected, ale to dá přežít…
Výsledkem je třída DataSource:
<?php
final class DataSource extends DibiFluent implements IDataSource{
private $rowClass = null;
public function __construct(DibiConnection $connection, object $rowClass = null){
parent::__construct($connection);
$this->setRowClass($rowClass);
}
public function setRowClass(object $rowClass = null){
$this->rowClass = $rowClass;
return $this;
}
public function getRowClass(){
return $this->rowClass;
}
public function getResult(){
$rows = $this->fetchAll();
if(count($rows) < 1){
return null;
}
if($this->rowClass !== null){
$return = array();
foreach($rows as $row){
$class = clone $this->rowClass;
$return[] = $class->setData($row); // zde je možnost, že třída vrátí místo sebe jinou třídu
}
if(count($return) == 1){
$return = $return[0];
}
return $return;
}
return $rows;
}
public function getIterator(){
return new ArrayIterator($this->getResult());
}
public function __clone(){
$this->clauses = unserialize(serialize($this->clauses)); // HACK: clones clauses!
}
}
?>
Editoval semtex.989 (25. 8. 2010 8:18)