0

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

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

例如(这可能吗?)

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

2 回答 2

0

我为此使用反射编写了一个程序。这最初是为 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();
于 2014-08-07T13:29:54.527 回答
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);
}
于 2013-08-29T02:02:27.727 回答