рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!
рдЖрдЬ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕реЛрд╢рд▓ рдЧреЗрдо рдЯрд╛рдЗрдо рдореИрдиреЗрдЬрд░ рдореЗрдВ рдХреИрд╢ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ
рдЗрд╕ рдПрдХ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ php (Yii), mysql рдФрд░ memcached рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдВрд╕реНрдерд╛рдПрдБ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рдЕрдкрдирд╛ рдореЙрдбрд▓ рд╣реИ, рдЬреЛ рдХрд┐ рдХреИрдХреНрдЯрд┐рд╡ рд░реЗрдХрд╛рд░реНрдб рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред
рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЙрдбрд▓ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, рдмреЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВред рдЬрдм рд╣рдо Gii рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЙрдбрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рдореЙрдбрд▓ / рдмреЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдФрд░ рдмреЗрд╕ рдХреЛ рд╡рд░реНрдЧ рдирд╛рдо рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдлрд┐рд░ рд╣рдо рдмреЗрд╕ рдХреЗ рдмрд┐рдирд╛ рдореЙрдбрд▓ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдореЙрдбрд▓ () рд╡рд┐рдзрд┐ рд╣реИред
рд╡реИрд╕реЗ, рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдмреЗрд╕ рдореЙрдбрд▓ CActiveRecord рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди ExtActiveRecord рд╕реЗ - рд╣рдо рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП CActiveRecord рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЙрд╕ рдкрд░ рдФрд░ рдмрд╛рдж рдореЗрдВред рдЕрдм рддрдХ, рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:
рдореЙрдбрд▓ / рдмреЗрд╕ / BaseUser.php - рдорд╛рдирдХ рд╡рд░реНрдЧ рдЬреЛ Gii рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ
рдореЙрдбрд▓ / User.php - рдПрдХ рд╡рд░реНрдЧ рдЬреЛ рдмреЗрд╕рдпреВрд╕рд░ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рдореЙрдбрд▓ () рд╡рд┐рдзрд┐ рд╣реИ
public static function model($className=__CLASS__) { return parent::model($className); }
рдЗрд╕ рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рд░-рдмрд╛рд░ рдЖрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рдЕрдкрдирд╛ рдХреЛрдб рдирд╣реАрдВ рдЦреЛрддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ Yii рдХреЗ рдорд╛рдирдХ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рди рдХреЛ рд░реЛрдХрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ 'application.models.baseред *' рдЬреЛрдбрд╝рдирд╛ рди рднреВрд▓реЗрдВред
рдЪрд▓рд┐рдП рдкреЛрд╕реНрдЯ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ рдФрд░ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
- рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рдХрд░реЗрдВ
- рдЪрдпрди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рдХрд░реЗрдВ
рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рдХрд░реЗрдВ
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП, рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ 2 рд╕реЗ рдЕрдзрд┐рдХ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 3 рдЯреАрдореЛрдВ рдХрд╛ рдПрдХ рдкреИрдХреЗрдЯ рд╣реИ: рдЕрдиреБрднрд╡ рдореЗрдВ рд╡реГрджреНрдзрд┐, рдПрдХ рднрд╡рди рдЦрд░реАрджрдирд╛ рдФрд░ рдЦрд┐рд▓рд╛рдбрд╝реА рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЕрдиреБрднрд╡, рдкреИрд╕рд╛ рдФрд░ рдирд╛рдо рдПрдХ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВред
рдХрддрд╛рд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдРрд╕рд╛ рд╣реИ рдХрд┐ рдЯреАрдореЛрдВ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдорд╛рдирдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдЯреАрдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдХреЛ рд▓реЛрдб рдХрд░реЗрдЧреА, рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдЧреА рдФрд░ рдЗрд╕реЗ рдмрдЪрд╛рдПрдЧреАред
рдЕрдм рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рд╕рднреА рдХрдорд╛рдВрдб рд╕рд╣реЗрдЬреЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рджред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдореЙрдбрд▓ рдХрд╛ рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдмрдирд╛рдПрдВрдЧреЗред
рдпрд╣ рдПрдХ рдРрд╕реА рдЪреАрдЬ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ :: рдореЙрдбрд▓ () -> findByPk () рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реЗрдВрдЧреЗред
рдореЙрдбрд▓ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдПрдХ рдШрдЯрдХ рд╣реЛрдЧреА рдФрд░ рдШрдЯрдХреЛрдВ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдЧреА
'components' => array(
рд╡рд░реНрдЧ рд╣реА рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ
class ModelRegistry { protected $registries = array(); public function init() {} 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); }
рд╣рдорд╛рд░реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбрд▓ рдЬрд┐рд╕реЗ рд╣рдо рдореЙрдбрд▓ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рдкрд╛рд╕ рдПрдХ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдкрджреНрдзрддрд┐ рд╣реЛрдЧреА рдЬреЛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧреАред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ
class User extends BaseUser { public static function model($className=__CLASS__) { return parent::model($className); } public function registry($userID) { if ($obj = $this->findByPk($userID)) { $res = $obj; } else { $res = false; } return $res; } }
рдпрд╣ рд╕рдм рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рджреЛ рддрд░реАрдХреЛрдВ рдХреЛ рдХрд╣рддрд╛ рд╣реИред
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) {
рджрд░рдЕрд╕рд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реЗрд▓реЗрдХреНрдЯ рдкрд░ рдПрдХ рдФрд░ рдЕрдкрдбреЗрдЯ рдкрд░ рдПрдХ рдХреЙрд▓ рд╣реЛрдЧреАред
рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪреБрдиреМрддреА рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛ рджреВрд╕рд░реА рдмрд╛рд░ рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлрд╝реАрд▓реНрдб рд╕рдорд╛рди рд░рд╣реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдмрдЪрдд рдЕрднреА рднреА рдХреА рдЬрд╛рдПрдЧреАред рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ ActiveRecord рдХреЗрд╡рд▓ рддрднреА рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдЖ рд╣реЛред
рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдорд╛рд░рд╛ рдПрдХреНрд╕реНрдЯреЗрдХреНрдЯрд┐рд╡ рд░реАрдХрд╛рд░реНрдб рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдХреИрдХреНрдЯрд┐рд╡ рд░реЗрдХрд╛рд░реНрдб рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рдереЗред
class ExtActiveRecord extends CActiveRecord { protected $_oldAttributes = array(); public function registry() {} public function memoryAttributes() { $this->_oldAttributes = $this->attributes; } 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; } 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) {
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдм рдХреЗрд╡рд▓ рдмрджрд▓реЗ рд╣реБрдП рдореЙрдбрд▓ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдпрд╛ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдореИрдВ рдЖрдкрдХреЛ рд░рдЪрдирд╛рддреНрдордХрддрд╛ рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рдЫреЛрдбрд╝рддрд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдореЙрдбрд▓ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рддрд╛ рд╣реВрдВред
рдореИрдВрдиреЗ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдХрд┐рд╕реА рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреИрд╕реЗ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдРрд╕реЗ рд╣рд╛рд▓рд╛рдд рдкреИрджрд╛ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрдм рд╣рдореЗрдВ рд╡рд╣рд╛рдВ рдПрдХ рд╕реВрдЪреА рдЬрдорд╛ рдХрд░рдиреА рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 10 рдХрд╛рд░реЗрдВ рд╣реИрдВред рдФрд░ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ 10 рдХрд╛рд░реЗрдВ рди рд╣реЛрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд╕реНрддреБ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдорд╢реАрдиреЗрдВ рд╣реЛрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЙрдбрд▓рд▓рд┐рд╕реНрдЯ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреЛ рдорд╢реАрди рдореЙрдбрд▓ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИред
class ModelList { public $list = array(); public static function make($list = array()) { if (!is_array($list) && empty($list)) { $list = array(); } $obj = new ModelList(); $obj->list = $list; return $obj; } public function pushObject($obj) { $this->list[] = $obj; } public function callMethod($name) { foreach ($this->list as &$obj) { $obj->$name(); } } public function save() { $this->callMethod('save'); } }
рдФрд░ рдпрд╣рд╛рдБ рдПрдХ рдореЙрдбрд▓ рдХрд╛рд░ рд╣реИ
<?php class Car extends BaseCar { public static function model($className=__CLASS__) { return parent::model($className); } public function registry($userID) { $list = $this->findAllByAttributes(array('user_id'=>$userID)); $res = ModelList::make($list);
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдм, рдЬрдм рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ,
$carList = &Yii::app()->modelRegistry->registry('car', 1);
рдлрд┐рд░ рд╣рдореЗрдВ рдореЙрдбрд▓рд▓рд┐рд╕реНрдЯ рдХреНрд▓рд╛рд╕ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдорд┐рд▓рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреА рд╕рднреА рдорд╢реАрдиреЗрдВ рд╣реЛрдВрдЧреАред рдЙрдиреНрд╣реЗрдВ рдмрджрд▓рд╛ рднреА рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ($ carList-> рд╕реВрдЪреА рдореЗрдВ рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреВрд▓рдХрд░) рдФрд░ рдлрд┐рд░ рдорд╛рдирдХ saveAll рдХреЗ рд╕рд╛рде рдореЙрдбрд▓ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдЪрд╛рдпрд╛ред
рдЪреВрдВрдХрд┐ рд▓реЗрдЦ рдХрд╛рдлреА рдмрдбрд╝рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдпрд╣ рд╕рдм рдХреИрд╢рд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред
рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЖрджрд░реНрд╢ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рд╣реА рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рджреЛ рдмрд╛рд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдХреЗ рдмрд╛рдж рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред
рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рд╡рд┐рдХрд▓реНрдк рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдП рдХрд┐ рдХреНрдпрд╛ рдХрд╛рд░реНрдп рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред