Campo extra mysq

Hola, estoy haciendo una aplicación con Yii(estoy iniciando en YII) y extjs4 en MVC

Así que el Yii solo me retorna los datos del mysql en json, y recibe las variables en GET. Solo uso (models y controller)

Bueno, mi sistema es mult usuario, y por tanto, cuando alguien agrega un nuevo registro, preciso agregar en el INSERT un campo llamada id_user, el value de este campo sera el $_SESSION[userid].

Como lo hago?

Saludos

Cordial Saludo,

Yii tiene varias alternativas… se podría hacer por rules() o por beforeSave()…

en rules()


array('id_user','default','value'=>$_SESSION['userid'], 'on'=>'insert')

y en beforeSave podría ser algo como:


public function beforeSave(){

if($this->getIsNewRecord()){

   $this->id_user = $_SESSION['userid'];

}

return parent::beforeSave(); //No olvidar esta línea

}



Espero le sirva.

Cabe agregar que no estoy muy convencido de que hacer una asignación de ese tipo sea apropiada…

Especialmente sabiendo que el id del usuario SIEMPRE está disponible luego de un inicio de sesión (siguiendo las reglas de Yii)… usando la función/variable:


Yii::app()->user->id

Échele un vistazo a la documentación de CWebUser y CUserIdentity (generalmente existen en protected/components/ versiones hijas)

Saludos.

También tenemos un foro en español en http://yiiframeworkenespanol.org/foro que últimamente está más activo que este :P

Hola, gracias por la ayuda

me ando perfecto así

public function beforeSave(){

if($this->getIsNewRecord()){


	$this->id_agent = Yii::app()->getSession()->get('userid');


}


return parent::beforeSave();


}

ya en rules no

array(‘id_agent’,‘default’,‘value’=>1, ‘on’=>‘insert’),

Gracias me voy a subscribir en el otro foro también

Ya pude hacer los insert con el ID del usuario.

Ahora preciso que un usuario solo pueda ver los registro que tenga en el campo id_user su id.

puedes usar RBAC (Role-based access control) para eso

Hola, ya estoy usando el access control.

Lo que preciso es agregar en el select del abstractModel una condición que solo retorne los datos que en el campo id_agent tenga el id del usuario logado.

en una tabla sin relacionamiento, o sea, que tenga el campo id_agent , pude hacer aplicando un filter default.

Pero en tablas relacionadas, todavía no entendí como hacer.

La culta seria asi

SELECT * FROM compras LEFT JOIN users ON compras.id_card = users.id WHERE users.id_agent = 5

Quiero listar solo compras de usuarios que son del agent 5

Saludos y gracias por la ayuda

buenos, disculpe tantas preguntas es que estoy iniciando en YII

SOLUCION

solo agregar en el findAll el join


$this->join = LEFT JOIN users ON compras.id_card = users.id

$newRecord = $this->abstractModel->findAll(array(

					'select' => $this->select,

					'join'=> $this->join,

					'condition' => "$namePk = $id"

				));