我想为模型创建一条新记录。
我想,而不是手动指定模型的每个字段,而是迭代模型的字段列表,并从帖子哈希中提取值(如果它们在那里)
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);
答案 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();