Pareces nuevo por aquí. Si quieres participar, ¡pulsa uno de estos botones!
private $_registered_mn = array(); public function register_mn($relation,$isFirst){ if(!array_key_exists($relation, $this->_registered_mn)){ $this->_registered_mn["$relation"] = $isFirst; } } public function __call($method, $args=array()){ ... if(array_key_exists($mmodel,$this->_registered_mn)){ $has_relation = $true; if(kumbia::$models[$model]){ $isFirst = $this->_registered_mn["$mmodel"]; $tablemn = (!$isFirst) ? $this->source . '_' . $mmodel : $mmodel . '_' . $this->source; $query = "SELECT * FROM $mmodel WHERE id IN (SELECT {$mmodel}_id FROM $tablemn WHERE {$this->source}_id = $this->id)"; $result = kumbia::$models[$model]->find_all_by_sql($query); return $result; } else { return array(); } } ... }
class Controlador extends ActiveRecord { public function Controlador(){ $this->register_mn('rol',true); $this->register_mn('accion',false); } } class Accion extends ActiveRecord { public function Accion(){ $this->register_mn('controlador',true); } }
Comentarios
Un ejemplo de relaciones muchos a muchos (m:n):
* Un Usuario puede tener varios Roles.
* Un Rol puede tener varios Controladores.
En la documentación que viene con la versión 0.4 dice que estas asociaciones no están soportadas. He aquí un código con el que pude ahorrarme unas lineas de SQL:
En el archivo /forms/db/active_record.php adicionamos la variable _registered_mn, y creamos la funcion register_mn: Posteriormente modificamos el método mágico __call (las dos primeras lineas se han incluido para una mejor compresion pues forman parte del archivo).
Notese que se asume la notacion de T1_T2 en las tabla, y sus campos son de la forma T1_id, T2_id. Procedemos a registrar los controladores:
Para probar:
Saludos y sigue así.