[英]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.