Yii Framework Forum: Afertersave Y Beforesave - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Afertersave Y Beforesave Rate Topic: -----

#1 User is offline   MagnusSolution 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 17
  • Joined: 13-August 12

Posted 31 October 2012 - 01:30 PM

hola, estoy con un problema con el metado save().


preciso ejecutar uno UPDATE con este formato

UPDATE $table SET $setters WHERE $namePk IN($strIds)


Usando el metado save(), no pude hacer, entonces hice asi.

$sql = "UPDATE $table SET $setters WHERE $namePk IN($strIds)";
$this->success = Yii::app()->db->createCommand($sql)->execute() !== false;


Funciona el UPDATE, pero no llama los metados beforeSave ni el afterSave.

Saludos
0

#2 User is offline   robregonm 

  • Experienced Yii Developer
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 601
  • Joined: 30-July 09
  • Location:Colombia

Posted 31 October 2012 - 01:36 PM

Las funciones beforeSave y afterSave sólo se disparan si se usa ActiveRecord para hacer la gestión de los registros.
Ejemplo:
$registro = MiTabla::model()->findByPk($id);
$registro->campo1 = 'XXXX';
$registro->save(); // Acá se ejecutan los métodos beforeSave y afterSave


Espero le sea de utilidad.
Ricardo Obregón
LinkedIn Profile
YiiFramework en Español - http://yiiframework.co/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx, MySQL, PostgreSQL, Yii 1.x & 2.x, CanJS and more.
Follow me: @robregonm & @obregonco & @1ServerCo.
0

#3 User is offline   robregonm 

  • Experienced Yii Developer
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 601
  • Joined: 30-July 09
  • Location:Colombia

Posted 31 October 2012 - 01:41 PM

Por lo que veo, creo que está haciendo actualización masiva de varios registros.
Dependiendo de las necesidades es más útil o práctico el uso de DAO (como ud lo está haciendo) o el uso de ActiveRecord (mi ejemplo).
Si necesita triggers, desea gestionar TODO desde PHP Y no le interesa el pequeño impacto en velocidad entonces la solución es sin duda ActiveRecord.
Pero si la velocidad es un aspecto MUY importante (la diferencia no es considerable en un sitio normal) y no necesita los triggers, entonces la salida es con DAO.

Espero que esto aclare las posibles dudas :)
Ricardo Obregón
LinkedIn Profile
YiiFramework en Español - http://yiiframework.co/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx, MySQL, PostgreSQL, Yii 1.x & 2.x, CanJS and more.
Follow me: @robregonm & @obregonco & @1ServerCo.
0

#4 User is offline   robregonm 

  • Experienced Yii Developer
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 601
  • Joined: 30-July 09
  • Location:Colombia

Posted 31 October 2012 - 01:43 PM

Ah, sea dicho de paso que muy raras veces uso DAO en mis aplicaciones desarrolladas en Yii... casi siempre (por no decir siempre) usamos ActiveRecord....
Y también cabe mencionar que ActiveRecord usa internamente DAO para las consultas.

Saludos.
Ricardo Obregón
LinkedIn Profile
YiiFramework en Español - http://yiiframework.co/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx, MySQL, PostgreSQL, Yii 1.x & 2.x, CanJS and more.
Follow me: @robregonm & @obregonco & @1ServerCo.
0

#5 User is offline   MagnusSolution 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 17
  • Joined: 13-August 12

Posted 31 October 2012 - 01:54 PM

hola, si estoy usando un update all, con muchos registros, en algunos modulos mas de 20 mil registro, y la velocidad es fundamental, es mi 1º proyecto con yii, y en este update estoy bastante perdido.

siu me podes dar un ejemplo de como hacer este update usando ActiveRecord, estaría bárbaro.

Es muy importante que llame el metado afterSave

Saludos
0

#6 User is offline   robregonm 

  • Experienced Yii Developer
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 601
  • Joined: 30-July 09
  • Location:Colombia

Posted 31 October 2012 - 02:08 PM

Bueno la solución más simple sería algo así:
$registros = MiTabla::model()->findAll('campo1 IN (...) AND ...');
foreach($registros as $reg){
	$reg->campo2 = 'xxxx';
	$reg->save(false); // false aumenta un poco la velocidad saltando las validaciones en rules()


Saludos
Ricardo Obregón
LinkedIn Profile
YiiFramework en Español - http://yiiframework.co/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx, MySQL, PostgreSQL, Yii 1.x & 2.x, CanJS and more.
Follow me: @robregonm & @obregonco & @1ServerCo.
0

#7 User is offline   MagnusSolution 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 17
  • Joined: 13-August 12

Posted 31 October 2012 - 02:26 PM

voy hacer es usando filtro, o sea, solo permito updateall, si antes fue realizado un filtro.
Si no fue realizado el filtro, entonces limito en update para solo 100 registros. Si se intenta actualizar mas de 100 registro sin hacer una búsqueda, return false.

de esta forma puedo usar ActiveRecord sin perder velocidad,

Gracias
0

#8 User is offline   robregonm 

  • Experienced Yii Developer
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 601
  • Joined: 30-July 09
  • Location:Colombia

Posted 31 October 2012 - 04:26 PM

Interesante solución.
Nos cuenta cómo le fue :)
Ricardo Obregón
LinkedIn Profile
YiiFramework en Español - http://yiiframework.co/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx, MySQL, PostgreSQL, Yii 1.x & 2.x, CanJS and more.
Follow me: @robregonm & @obregonco & @1ServerCo.
0

#9 User is offline   Apositivo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 20
  • Joined: 06-August 13

Posted 14 August 2013 - 12:50 AM

saludos a todos, y que tal si luego del :

public function actionUpdate($id)
	{
		
		$model=$this->loadModel($id);

if(isset($_POST['Persons']))
{
$audit="The user".Yii::app()->user->user_id." make the following updates... : ";
				foreach($model->attributes as $key => $value) 
				{
					
					if(isset($_POST['Persons'][$key]))
					{
					if($value!=$_POST['Persons'][$key])
					$audit.="[".$value. "] by . . [".$_POST['Persons'][$key]."],";
					}
				  
				}
}
if($valid)
			{
				
				
				
				
				
				
				
					if($model->save())
					{
}} . . . . 

0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users