Вообще как то странно ты описал, модешь вообще не должна знать ничего о соеднинении, она только может его использовать, вот пример
abstract class Infr_Connection{
abstract function query();
abstract function getAll();
abstract function getOne();
}
Class Model_DataSource {
protected $connect = null;
protected $filter = array();
public function __construct(Connection $connect){
$this->connect = $connect();
}
public function setFilter($filtr = array()){
$this->filter = $filter;
}
}
Допустим у нас есть блог и бд postgress
Class PG_Connect extends Connect{}
Class Blog_Source extends DataSource(
public function getFirstUncommite dPosts(){
return $this->connect->query('SELECT * from blog.posts as self where self.comment_count = 0' )->getAll();
}
)
$blogSource = new Blog_Source(ServiceLocator::getService('PG_Connect'));
$blogSource->getFirstUncommite();
Где ServiceLocator это может быть что угодно для управлением зависимостями в проекте, или просто в контроллере $this->getService('connection')
тут полет фантазии
притом BlogSource я не зря так назвал, так как это только источника данных, который в текущий момент использует БД ПГ, и выьорка это особенность реализации, и внутри уже можно управлять поведеним, в зависимости что передано, так и вести себя, хотя немного нарушит другое, допустим был передан коннект mongoDB , вы делаете другую выборку
При таком подходе в случае смены типа хранилища, вы легко и быстро адаптируете, и следуете open-closed принципу, не трогая остальное, но тут уже другая история.
а по мне так самое лучшее MVP (Model View Presenter) но тут уже в вики прочитать, копипасту не охота