рдПрдХ рд╕рдордп рдкреНрд░рдмрдВрдзрдХ рдЦреЗрд▓ рдореЗрдВ Yii рдХреЗ ActiveRecord рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!

рдЖрдЬ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕реЛрд╢рд▓ рдЧреЗрдо рдЯрд╛рдЗрдо рдореИрдиреЗрдЬрд░ рдореЗрдВ рдХреИрд╢ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЗрд╕ рдПрдХ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ php (Yii), mysql рдФрд░ memcached рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдВрд╕реНрдерд╛рдПрдБ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рдЕрдкрдирд╛ рдореЙрдбрд▓ рд╣реИ, рдЬреЛ рдХрд┐ рдХреИрдХреНрдЯрд┐рд╡ рд░реЗрдХрд╛рд░реНрдб рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред

рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЙрдбрд▓ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, рдмреЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВред рдЬрдм рд╣рдо Gii рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЙрдбрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рдореЙрдбрд▓ / рдмреЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдФрд░ рдмреЗрд╕ рдХреЛ рд╡рд░реНрдЧ рдирд╛рдо рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдлрд┐рд░ рд╣рдо рдмреЗрд╕ рдХреЗ рдмрд┐рдирд╛ рдореЙрдбрд▓ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдореЙрдбрд▓ () рд╡рд┐рдзрд┐ рд╣реИред

рд╡реИрд╕реЗ, рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдмреЗрд╕ рдореЙрдбрд▓ CActiveRecord рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди ExtActiveRecord рд╕реЗ - рд╣рдо рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП CActiveRecord рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЙрд╕ рдкрд░ рдФрд░ рдмрд╛рдж рдореЗрдВред рдЕрдм рддрдХ, рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВред

рдПрдХ рдЙрджрд╛рд╣рд░рдг:
рдореЙрдбрд▓ / рдмреЗрд╕ / BaseUser.php - рдорд╛рдирдХ рд╡рд░реНрдЧ рдЬреЛ Gii рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ
рдореЙрдбрд▓ / User.php - рдПрдХ рд╡рд░реНрдЧ рдЬреЛ рдмреЗрд╕рдпреВрд╕рд░ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рдореЙрдбрд▓ () рд╡рд┐рдзрд┐ рд╣реИ
/** * Returns the static model of the specified AR class. * @param string $className active record class name. * @return User the static model class */ public static function model($className=__CLASS__) { return parent::model($className); } 



рдЗрд╕ рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рд░-рдмрд╛рд░ рдЖрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рдЕрдкрдирд╛ рдХреЛрдб рдирд╣реАрдВ рдЦреЛрддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ Yii рдХреЗ рдорд╛рдирдХ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рди рдХреЛ рд░реЛрдХрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ 'application.models.baseред *' рдЬреЛрдбрд╝рдирд╛ рди рднреВрд▓реЗрдВред

рдЪрд▓рд┐рдП рдкреЛрд╕реНрдЯ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ рдФрд░ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
  1. рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рдХрд░реЗрдВ
  2. рдЪрдпрди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рдХрд░реЗрдВ




рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рдХрд░реЗрдВ


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП, рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ 2 рд╕реЗ рдЕрдзрд┐рдХ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 3 рдЯреАрдореЛрдВ рдХрд╛ рдПрдХ рдкреИрдХреЗрдЯ рд╣реИ: рдЕрдиреБрднрд╡ рдореЗрдВ рд╡реГрджреНрдзрд┐, рдПрдХ рднрд╡рди рдЦрд░реАрджрдирд╛ рдФрд░ рдЦрд┐рд▓рд╛рдбрд╝реА рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЕрдиреБрднрд╡, рдкреИрд╕рд╛ рдФрд░ рдирд╛рдо рдПрдХ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВред

рдХрддрд╛рд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдРрд╕рд╛ рд╣реИ рдХрд┐ рдЯреАрдореЛрдВ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдорд╛рдирдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдЯреАрдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдХреЛ рд▓реЛрдб рдХрд░реЗрдЧреА, рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдЧреА рдФрд░ рдЗрд╕реЗ рдмрдЪрд╛рдПрдЧреАред

рдЕрдм рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рд╕рднреА рдХрдорд╛рдВрдб рд╕рд╣реЗрдЬреЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рджред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдореЙрдбрд▓ рдХрд╛ рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдмрдирд╛рдПрдВрдЧреЗред
рдпрд╣ рдПрдХ рдРрд╕реА рдЪреАрдЬ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ :: рдореЙрдбрд▓ () -> findByPk () рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реЗрдВрдЧреЗред

рдореЙрдбрд▓ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдПрдХ рдШрдЯрдХ рд╣реЛрдЧреА рдФрд░ рдШрдЯрдХреЛрдВ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдЧреА
 'components' => array( // ... 'modelRegistry'=>array( 'class' => 'ModelRegistry' ) // ... ) 


рд╡рд░реНрдЧ рд╣реА рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ
 class ModelRegistry { protected $registries = array(); public function init() {} /** *     * @param string $name * @param mixed $attr * @return ExtActiveRecord */ public function & registry($name, $attr = array()) { $key = $name . md5(serialize($attr)); if (!isset($this->registries[$key])) { $model = ucfirst($name); $obj = $model::model(); if (!is_array($attr)) $attr = array($attr); $this->registries[$key] = call_user_func_array(array(&$obj, 'registry'), $attr); } //         &    return $this->registries[$key]; } /** *   */ public function saveAll() { foreach ($this->registries as $obj) { $obj->save(); } } } 


рд╣рдорд╛рд░реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбрд▓ рдЬрд┐рд╕реЗ рд╣рдо рдореЙрдбрд▓ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рдкрд╛рд╕ рдПрдХ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдкрджреНрдзрддрд┐ рд╣реЛрдЧреА рдЬреЛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧреАред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ

 /** * @property integer $id * @property integer $exp * @property integer $money * @property integer $name */ class User extends BaseUser { /** * Returns the static model of the specified AR class. * @param string $className active record class name. * @return User the static model class */ public static function model($className=__CLASS__) { return parent::model($className); } /** *    * @param int $userID * @return User|bool */ public function registry($userID) { if ($obj = $this->findByPk($userID)) { $res = $obj; } else { $res = false; } return $res; } } 


рдпрд╣ рд╕рдм рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рджреЛ рддрд░реАрдХреЛрдВ рдХреЛ рдХрд╣рддрд╛ рд╣реИред

  /** * @var ModelRegistry */ protected $reg; public function actionRun() { $userID = 1; $this->reg = &Yii::app()->modelRegistry; $this->firstChange($userID); $this->secondChange($userID); $this->reg->saveAll(); } public function firstChange($userID) { //   .         // & ,        $user = &$this->reg->registry('user', $userID); $user->exp = 10; } public function secondChange($userID) { //    ,     .     // &  $user = &$this->reg->registry('user', $userID); $user->money = 20; } 


рджрд░рдЕрд╕рд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реЗрд▓реЗрдХреНрдЯ рдкрд░ рдПрдХ рдФрд░ рдЕрдкрдбреЗрдЯ рдкрд░ рдПрдХ рдХреЙрд▓ рд╣реЛрдЧреАред
рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪреБрдиреМрддреА рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛ рджреВрд╕рд░реА рдмрд╛рд░ рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлрд╝реАрд▓реНрдб рд╕рдорд╛рди рд░рд╣реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдмрдЪрдд рдЕрднреА рднреА рдХреА рдЬрд╛рдПрдЧреАред рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ ActiveRecord рдХреЗрд╡рд▓ рддрднреА рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдЖ рд╣реЛред

рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдорд╛рд░рд╛ рдПрдХреНрд╕реНрдЯреЗрдХреНрдЯрд┐рд╡ рд░реАрдХрд╛рд░реНрдб рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдХреИрдХреНрдЯрд┐рд╡ рд░реЗрдХрд╛рд░реНрдб рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рдереЗред

 class ExtActiveRecord extends CActiveRecord { protected $_oldAttributes = array(); /** *   ,       */ public function registry() {} /** *     */ public function memoryAttributes() { $this->_oldAttributes = $this->attributes; } /** *    .     *           ,   false * @return array|false */ protected function getChanges() { $res = array(); if (empty($this->_oldAttributes)) { $res = false; } else { foreach ($this->_oldAttributes as $key => $value) { if ($this->$key != $value) { $res[] = $key; } } } return $res; } /** *    * @return bool */ public function save() { if (($attr = $this->getChanges()) === false) { $res = parent::save(); } elseif ($attr) { $res = $this->update($attr); } else { $res = false; } return $res; } } 


рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдкрджреНрдзрддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ

 public function registry($userID) { if ($obj = $this->findByPk($userID)) { $res = $obj; } else { $res = false; } if ($res) { //     $res->memoryAttributes(); } return $res; } 


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдм рдХреЗрд╡рд▓ рдмрджрд▓реЗ рд╣реБрдП рдореЙрдбрд▓ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдпрд╛ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдореИрдВ рдЖрдкрдХреЛ рд░рдЪрдирд╛рддреНрдордХрддрд╛ рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рдЫреЛрдбрд╝рддрд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдореЙрдбрд▓ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рддрд╛ рд╣реВрдВред

рдореИрдВрдиреЗ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдХрд┐рд╕реА рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреИрд╕реЗ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдРрд╕реЗ рд╣рд╛рд▓рд╛рдд рдкреИрджрд╛ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрдм рд╣рдореЗрдВ рд╡рд╣рд╛рдВ рдПрдХ рд╕реВрдЪреА рдЬрдорд╛ рдХрд░рдиреА рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 10 рдХрд╛рд░реЗрдВ рд╣реИрдВред рдФрд░ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ 10 рдХрд╛рд░реЗрдВ рди рд╣реЛрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд╕реНрддреБ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдорд╢реАрдиреЗрдВ рд╣реЛрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЙрдбрд▓рд▓рд┐рд╕реНрдЯ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреЛ рдорд╢реАрди рдореЙрдбрд▓ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИред

 class ModelList { /** * @var array   ExtActiveRecord */ public $list = array(); /** *    * @param array|bool $list   ExtActiveRecord * @return ModelList */ public static function make($list = array()) { if (!is_array($list) && empty($list)) { $list = array(); } $obj = new ModelList(); $obj->list = $list; return $obj; } /** *     * @param ExtActiveRecord $obj */ public function pushObject($obj) { $this->list[] = $obj; } /** *      * @param string $name */ public function callMethod($name) { foreach ($this->list as &$obj) { $obj->$name(); } } /** *    */ public function save() { $this->callMethod('save'); } } 


рдФрд░ рдпрд╣рд╛рдБ рдПрдХ рдореЙрдбрд▓ рдХрд╛рд░ рд╣реИ
 <?php /** * @property integer $id * @property integer $user_id * @property integer $car_id * @property integer $speed */ class Car extends BaseCar { /** * Returns the static model of the specified AR class. * @param string $className active record class name. * @return Car the static model class */ public static function model($className=__CLASS__) { return parent::model($className); } /** *      * @param int $userID * @return ModelList */ public function registry($userID) { $list = $this->findAllByAttributes(array('user_id'=>$userID)); $res = ModelList::make($list); //      $res->callMethod('memoryAttributes'); return $res; } /** * ,   . ,      ModelList  pushObject * @param int $userID * @param int $carID * @return Car */ public static function make($userID, $carID) { $obj = new Car(); $obj->user_id = $userID; $obj->car_id = $dict->area_id; $obj->speed = 10; return $obj; } } 


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдм, рдЬрдм рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ,
 $carList = &Yii::app()->modelRegistry->registry('car', 1); 

рдлрд┐рд░ рд╣рдореЗрдВ рдореЙрдбрд▓рд▓рд┐рд╕реНрдЯ рдХреНрд▓рд╛рд╕ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдорд┐рд▓рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреА рд╕рднреА рдорд╢реАрдиреЗрдВ рд╣реЛрдВрдЧреАред рдЙрдиреНрд╣реЗрдВ рдмрджрд▓рд╛ рднреА рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ($ carList-> рд╕реВрдЪреА рдореЗрдВ рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреВрд▓рдХрд░) рдФрд░ рдлрд┐рд░ рдорд╛рдирдХ saveAll рдХреЗ рд╕рд╛рде рдореЙрдбрд▓ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдЪрд╛рдпрд╛ред

рдЪреВрдВрдХрд┐ рд▓реЗрдЦ рдХрд╛рдлреА рдмрдбрд╝рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдпрд╣ рд╕рдм рдХреИрд╢рд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред
рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЖрджрд░реНрд╢ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рд╣реА рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рджреЛ рдмрд╛рд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдХреЗ рдмрд╛рдж рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред

рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рд╡рд┐рдХрд▓реНрдк рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдП рдХрд┐ рдХреНрдпрд╛ рдХрд╛рд░реНрдп рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In177181/


All Articles