funcion para lista de usuarios

Iniciado por gAb1, 18 Septiembre 2014, 01:01 AM

0 Miembros y 1 Visitante están viendo este tema.

gAb1

Hola, estoy terminando una lista de usuarios, pero hay una parte en la que no me aclaro...

La funcion actual muestra una lista con los datos de un usuario.

La web es un CMS basado en Yii Framework. Aqui pongo el codigo:

UsuarioController.php
Código (php) [Seleccionar]
class UsuarioController extends Controller
{
public function actionAdmin()
{
if(Yii::app()->authManager->checkAccess('RUsuario', Yii::app()->user->getState("rol")))
{
$model=new Usuario('search_propios');
$model->unsetAttributes();
if(isset($_GET['Usuario'])) $model->attributes=$_GET['Usuario'];
$this->render('admin',array('model'=>$model,));
}
else
throw new CHttpException(401,'No tiene permisos de acceso al recurso URL.');
       }
}


Models -> Usuario.php
Código (php) [Seleccionar]
class Usuario extends CActiveRecord
{
public static function model($className=__CLASS__)
{
return parent::model($className);
}

public function tableName()
{
return 'rc_usuario';
}

public function search_propios()
{
// Warning: Please modify the following code to remove attributes that
// should not be searched.
$idUsuarioActual = Yii::app()->user->getState('idWeb');

$criteria=new CDbCriteria;

$criteria->compare('idUsuario',$this->idUsuario);
$criteria->compare('nombre',$this->nombre,true);
$criteria->compare('apellidos',$this->apellidos,true);
$criteria->compare('email',$this->email,true);
$criteria->compare('web',$this->web,true);
$criteria->order='idWeb';

return new CActiveDataProvider($this, array('criteria'=>$criteria,));
}
}


Esa lista muestra todos los usuarios, pero necesito que muestre solo unos segun las ids de otra tabla.

La tabla rc_amigo tiene las columnas 'idAmigo' y 'idUsuario'. Necesito que la lista muestre los amigos del usuario conectado, sería algo asi como
Código (sql) [Seleccionar]
SELECT * FROM rc_amigo WHERE idUsuario=1
Y, por ejemplo, esto sería lo que devuelve la sentencia:
Citar
-----------------------
idAmigo|idUsuario
        2 |            1
        3 |            1
        4 |            1
-----------------------

Si, en este caso, el usuario que hay conectado es el 1, necesito que la lista muestre los usuarios 2, 3 y 4 de la tabla rc_usuario.

Código (sql) [Seleccionar]
SELECT * FROM rc_usuario WHERE idUsuario = (SELECT * FROM rc_amigo WHERE idUsuario=1)

Ese 1 tendría que cambiarlo por el 'idUsuario' del login actual...

Mas o menos puedo hacerme una idea de como hacerlo, pero realmente llevo un lio en la cabeza, llevo unas horas probando y no consigo nada... ;(

¿Conoceis alguna manera simple de hacerlo?

Gracias!

MinusFour

Solo conozco Symfony realmente, pero parece ser que lo que buscas es establecer la relación de los Active Records.

http://www.yiiframework.com/doc/guide/1.1/en/database.arr

gAb1

¿Podría de alguna manera hacerse mas facil? Por ejemplo con:

Código (sql) [Seleccionar]
select * from rc_usuario where idUsuario = (select idAmigo from rc_amigo where idUsuario = $connectedUserID)

He probado esa consulta y al parecer da error si hay mas de 1 fila... si solo hay 1 resultado lo muestra...

Gracias!

MinusFour

La consulta que buscas quizá sea:

Código (mysql) [Seleccionar]

SELECT rc_usuario.*, rc_amigo.*
FROM rc_amigo
INNER JOIN rc_usuario ON rc_usuario.idUsuario = rc_amigo.idAmigo
WHERE rc_amigo.idUsuario = $connectedUserID

gAb1

#4
Sii muchas gracias funciona perfecto.

He conseguido armar algo muy simple y al parecer funciona bien, lo unico que falla es la variable que comprueba el id del usuario conectado con el id que obtiene de la db...

Código (php) [Seleccionar]
<?php header('Content-Type: charset=utf-8');

$connectedUserID Yii::app()->user->getState('idUsuario'); // aqui se declara

$idUsuario '0';
$idReferido '1';

mysql_connect('localhost''root''123456');
mysql_select_db('website');
$query sprintf("SELECT rc_usuario.*, rc_referidos.*
FROM rc_referidos
INNER JOIN rc_usuario ON rc_usuario.idUsuario = rc_referidos.idReferido
WHERE rc_referidos.idUsuario = '
$connectedUserID'"// aqui se usa
mysql_real_escape_string($idUsuario),
mysql_real_escape_string($idReferido));

$data mysql_query($query);

while (
$fila mysql_fetch_assoc($data)) {
    echo 
$fila['nombre'];
    echo 
$fila['apellidos'];
    echo 
$fila['direccion'];
    echo 
$fila['web'];
}

?>


No da ningún error, pero tampoco muestra nada, y he comprobado la id con la que estoy conectado y en la db esta esa id... debería de mostrar el contenido, pero no muestra nada ;(

Si cambio la variable '$connectedUserID' por el numero directamente si que muestra...

Gracias!

EDITO: Vale era problema del nombre que se usaba... idUsuario que no existia en la clase yii