如何在PHP Active Record中获取模型的属性?

时间:2013-08-29 01:10:54

标签: php activerecord phpactiverecord

我想为模型创建一条新记录。

我想,而不是手动指定模型的每个字段,而是迭代模型的字段列表,并从帖子哈希中提取值(如果它们在那里)

e.g。 (这可能吗?)

  $fields = Address::attributes()  // what is the actual name of this method?
  foreach($fields as $field) {
     if($_POST[$field) {
       $input[$field] = $_POST[$field];
     }
  } 
  Address::create($input);

2 个答案:

答案 0 :(得分:0)

以下是我在HTML表单字段与数据库字段相同时使用的内容。

if( isset($_POST['Submit']) && $_POST['Submit']=="Save") {
  $p = $_POST;
  $flds = ""; $dta=""; $tbl='dummy';
  foreach ($p as $key=>$value) {
    if( strpos("Submit ",$key) === false ) {
      if( $flds != "" ) { $flds .= ","; $dta .= ","; }
      $flds .= $key;
      $dta .= $db->escape($value);
    }
  }
  $sql = "INSERT INTO $tbl (".$flds.") VALUES (".$dta.")";
  $db->query($sql);
}

答案 1 :(得分:0)

我使用Reflection为此编写了一个程序。这最初是为Codeigniter项目编写的,但是应该很好地转换到任何php-activerecord项目,只需要很少的调整。

public static function RoutePostToModel(&$model) {

    $refClass = new ReflectionClass(get_class($model));

    if($refClass->isSubclassOf("ActiveRecord\\Model")) {

        /* This is a subclass of ActiveRecord\Model. */

        $columns = $model->attributes();

        foreach($_POST as $key => $value) {
            if(array_key_exists($key, $columns)) {
                $model->$key = $value;
            }
        }

    }

}

每当你想用你的帖子数据填充你的模型时,只需要这样做:

$example = new ExampleModel();
RoutePostToModel($example);
$example->save();