Buenas preguntas
miktrv, pero no hay respuestas simples,
1- Hay varias formas de resolverlo, una seria utilizar DI, esto se comento en tu thread anterior, otra mas simple seria que tuvieras un Registry, que en el guardes la conexión y que tus dao's hicieran un fallback al Registry, algo así:
Código PHP:
Ver originalabstract class Dao implements IDao
{
protected $_pdo;
public function __construct(PDO $pdo = null)
{
if (null === $pdo) {
$pdo = $this->_getDefaultConnection();
}
$this->_pdo = $pdo;
}
protected function _getDefaultConnection()
{
if(!Registry::has('PDO')) {
throw new DaoException(/***/);
}
return Registry::get('PDO');
}
}
class OfertaDao extends Dao
{}
esta implementación si bien es mas simple, oculta dependencias, lo ideal seria DI, con respecto a cerrar la conexión, de eso no te tenes que preocupar, lo hace PHP cuando termina la ejecución del script.
2- Quien recive el id es el finder del Dao, osea en tu controller instanciarias el Dao y llamarias al find con el id correspondiente,
Código PHP:
Ver originalinterface IDao
{
public function find($id);
public function findAll();
}
abstract class Dao implements IDao
{}
class OfertaDao extends Dao
{}
//Controller
$dao = new OfertaDao();
$oferta = $dao->find($_GET['id']);
3- esta pregunta es por demás compleja, la forma simple es que te traigas todo lo relacionado.
Código PHP:
Ver originalclass OfertaDao extends Dao
{
public function find($id, $loadRelated = false)
{
$oferta = parent::find($id);
if(true === $loadRelated && $oferta instanceof Oferta) {
$cdao = new CiuidadDao();
$oferta->Ciudad = $cdao->find($oferta->cuidad_id);
}
return $oferta;
}
}
esto no es mas que una implementación extremadamente simple, yo realmente te sugiero por el tipo de preguntas que estas haciendo, que utilices una herramienta como
Doctrine y si es posible la version 2, el problema es que corre sobre PHP 5.3+.
Saludos.