Ciao.
sto usando un tableGateway che trovo molto
utile per delete update e insert.
Per le select quando ci sono join
mi trovo un poco spiazzato 
Nei miei models avevo pensato di fare una cosa
del genere (è solo un esempio)
Codice PHP:
class w_db_TableGateway{
protected $pdo= null;
protected $table= '';
protected $columns = null;
protected $pkey= '';
public function __construct(w_db_Database $pdo,$table) {
$this->pdo= $pdo;
$this->table= $table;
}
public function insert($data){
//INSERT
}
}
class models_category extends w_db_TableGateway{
public function __construct(w_db_Database $pdo,$table) {
parent::__construct(w_db_Database $pdo,$table);
}
public function insertCategory($data){
$this->insert($data);
}
public function selectCategory(){
$sql= "SELECT * FROM categories LEFT JOIN etc ....";
$result= $this->pdo->query($sql);
$result->setFetchMode(PDO::FETCH_OBJ);
return $result->fetchAll();
}
}
Che ne pensate ?
Altre soluzioni ?