Veamos, mi consulta va por otros tiros. Imaginemos los post de un foro y los usuarios. Evidentemente son tablas diferentes, lo único que en los post se guarda el id del usuario que lo creo.
Entonces tenemos que las tablas son así (por ejemplo):
Posts: id (int), user_id(int), texto(text)
Usuarios: id(int), nombre(varchar(50))
Y en clases lo representaríamos así:
Código PHP:
class post {
// atributos
var $id;
var $user_id;
var $texto;
// métodos
/* los metodos que sean */
}
class user{
// atributos
var $id;
var $nombre;
// métodos
/* los metodos que sean */
}
Para luego manejar estas clases para por ejemplo hacer un listado, tendríamos que tener unas clases globales que manejaran a estas. Es decir
Código PHP:
class managerPost {
// atributos
var $aPosts; /* array de posts */
// metodos
function listarPost() { /* codigo */ }
}
Para los usuarios ser haría lo mismo.
Bien entonces teniendo el ejemplo de los post, es lógico que la función listar fuera así:
Código PHP:
function listarPost($oBaseDeDatos) {
$sql = "select * from posts;"
$resultado = $oBaseDeDatos->query($sql);
/* hacemos lo que sea con el resultado */
}
Bien, con esto tengo una función que me lista todos los post. Guay, pero..y si yo quiero que en el listado aparezca el nombre del usuario que lo hizo?
En SQL es bien sencillo, se puede hacer un join de las tablas de usuarios y post y solucionado. Pero haciendo esto con SQL, el tema de los objetos me lo paso por el arco del triunfo y claro, teniendo un gestor de base de datos por debajo (MySQL o lo que sea), veo una tontería tener que recuperar el post y luego hacer otra llamada SQL sólo para recuperar el nombre del usuario. De ahí la necesidad de la capa de enlace de datos que interactuara sin violar el tema de los objetos.
Por más que he buscado no he encontrado nada que me dé solución, por lo que creo que la solución pasaría por dar un atributo más a la clase post, que sea por ejemplo $nombreUsuario, y que sólo cuando haga un listado, coga valor.
¿Qué os parece esta solución?