En mi aplicación tengo articulos y etiquetas y lo he hecho según el tutorial de blog de yii, de manera que para obtener las etiquetas de un artículo llamo a $articulo->getTagArray().
Me gustaría en cada artículo poder obtener un listado de los articulos relacionados, que son aquellos que comparten subseccion_id y 2 etiquetas por lo menos.
He creado esta función en el modelo articulo, pero consume demasiados recursos creo que no es la mejor manera, sabbe alguien una manera más sencilla o puede orientarme??
public function getRelacionados($articulo_id){
ini_set('memory_limit','32M');
$articulo=articulo::model()->find('id='.$articulo_id);
$relacionados = articulo::model()->findAll('subseccion_id=:subseccion', array(':subseccion'=>$articulo->subseccion_id));
$articulos = array();
foreach($relacionados as $relacionado):
if( count(array_intersect($articulo->getTagArray(),$relacionado->getTagArray())) >=2 && $relacionado->id!=$articulo->id ) {
array_push($articulos, $relacionado);
}
endforeach;
return $articulos;
}
En el modelo artículo, una función que me devuelve los artículos relacionados que obtengo al recorrer las etiquetas del artículo(($articulo->getTagArray()), si los artículos de esa etiqueta pertenecen a la misma sección y no es el artículo del que queremos sacar los relacionados lo añado a $relacionados:
public function getRelacionados($articulo_id){
$articulo=articulo::model()->find('id='.$articulo_id);
$relacionados = array();
foreach($articulo->getTagArray() as $name)
{
$etiqueta = etiqueta::model()->findByAttributes(array('nombre'=>$name));
foreach($etiqueta->articulos() as $art)
{
if($articulo->subseccion_id == $art->subseccion_id && $articulo->id != $art->id)
array_push($relacionados, $art);
}
}
return $relacionados;
}