Yii找到或初始化方法

时间:2014-04-28 21:24:01

标签: activerecord yii

我在Yii Framework中寻找一个等效的Rails方法,该类在类级别上找到基于ActiveRecord需要匹配的传入数组的现有记录。如果找到,这将返回匹配的ActiveRecord。如果未找到,则返回新实例化的ActiveRecord。

以下是我希望它看起来如何的示例:

$person = Person::model()->find_or_initialize_by(array('name'=>'bob','age'=>20));

2 个答案:

答案 0 :(得分:0)

但是yii中没有这样的内置函数,这是可用的内置函数

http://www.yiiframework.com/doc/api/1.1/CActiveRecord#find-detail

您可以在模型中使用此自定义功能

public function find_or_initialize_by($array){

$model = Person::model()->find('name=:name AND age=:age',array(':name'=>$array["name"],':age'=>$array["age"]));

if($model == null){ 
    $model = new Person;
}

$model->name = $array["name"];
$model->age = $array["age"];
$model->save();

}

答案 1 :(得分:0)

您可以通过扩展它来将其添加到核心CActiveRecord。在protected / components / ActiveRecord.php中,添加:

class ActiveRecord extends CActiveRecord
{
  public static function find_or_initialize_by($params)
  {
    if( ! $model = static::model()->findByAttributes($params) )
    {
      $model = new static();
      foreach($params as $name => $value)
        $model->$name = $value;
    }
    return $model;
  }
}

然后你可以这样称呼它:

$person = Person::find_or_initialize_by(array('name'=>'bob','age'=>'20'));