繁体   English   中英

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

[英]How do I get the attributes for a model in PHP Active Record?

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

我想代替手动指定模型的每个字段,而是遍历模型的字段列表,并从值中提取值(如果存在)

例如(这可能吗?)

  $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);

这是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);
}

我使用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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM