La pregunta es de que manera puedo establecer una relacion que mediante un parametro usualmente account_id pueda obtener el listado de clientes, si tengo las siguientes tablas …
accounts (ActiveRecord)
account_id
name
accounts_has_users
account_id (Relacion hacia accounts.account_id)
user_id (Relacion hacia users.user_id)
users (ActiveRecord)
user_id
username
lastname
clients (ActiveRecord)
client_id
user_id (Relacion hacia users.user_id)
Y actualmente tengo una relacion establecida en el ActiveRecord de la tabla clients
public function relations()
{
return array(
'User'=>array(self::HAS_MANY, 'UsersActiveRecord', 'user_id')
);
}
Al final deberia de conseguir una consulta similar a la siguiente:
SELECT *
FROM clients
INNER JOIN users ON clients.user_id = users.user_id
INNER JOIN accounts_has_users ON users.user_id = accounts_has_users.user_id
INNER JOIN accounts ON accounts_has_users.account_id = accounts.account_id
WHERE accounts.account_id = 1
Leyendo las instrucciones pude determinar el tipo de relacion y como crearlas…
ClientsActiveRecord
public function relations()
{
return array(
'User'=>array(self::BELONGS_TO, 'UsersActiveRecord', 'user_id'),
);
}
UsersActiveRecord
public function relations()
{
return array(
'Client'=>array(self::HAS_ONE, 'ClientsActiveRecord', 'user_id'),
'Account'=>array(self::MANY_MANY, 'AccountsActiveRecord', 'account_has_users(account_id, user_id)'),
);
}
Para acceder a las propiedades hice
$model->User->user_id
$model->User->user_name
$model->User->user_lastname
$model->User->Client->client_id
//El acceso a este campo ya no funciono
//$model->User->Account->account_id
Todo fue bien hasta que trate de acceder al account_id, esa relación no la pude establecer… alguna idea…
No se si es una solución, un error o un apaño extraño pero te cuento.
Al establecer relaciones con el mismo nombre que los modelos (Account y Account), yo he experimentado algún fallo en mi aplicación y no podía acceder a las mismas mediante
$model->relacion->relacion
Prueba a cambiár el nombre de la relación (Account por acount_rel por ejemplo), a mi me funciono.