Laravel / Eloquent - 列名称作为变量

MrE*_*ers 2 php laravel eloquent

Eloquent 提供了一种将内容传递到数据库的便捷方法

$table_name = new TableName;
$table_name->column_name = "some data";
$table_name->save();
Run Code Online (Sandbox Code Playgroud)

我从需要验证的表单中获得了大量数据,所以我想知道是否可以用变量替换列名,这样我可以将其放入某个循环中,并获取名称和数据来自数组。

$table_name->$columns[$i] = $data[$i];
Run Code Online (Sandbox Code Playgroud)

(虽然我想不是这样写的)

更新

最后我选择了以下内容:

$table_name = new TableName;
$nameArray=[
  1 => 'form-name-1',
  ...
];
$columnArray=[
  1 => 'column_name_1',
  ...
];

for($i=1;$i<=count($nameArray);$i++){
  if(logic logic logic) $table_name->{$columnArray[$i]} = $_POST[$nameArray[$i]];
  else $table_name->{$columnArray[$i]} = NULL;
}
$table_name->save();
Run Code Online (Sandbox Code Playgroud)

apo*_*fos 5

您可以执行以下操作之一:

1)创造价值

   $table_name = new TableName([
       "column_name" => "column_value"
   ]);
Run Code Online (Sandbox Code Playgroud)

2) 填充

$table_name = new TableName();
$table_name->fill([
    "column_name" => "column_value"
]);
Run Code Online (Sandbox Code Playgroud)

3)你最初建议的方式:

$valuesMap = [
    "column_name" => "column_value"
];
$table_name = new TableName();
foreach ($valuesMap as $column => $value) {
       $table_name->{$column} = $value; //The {} are optional in this case
}
Run Code Online (Sandbox Code Playgroud)

请注意,要执行 1 或 2 项操作,放入数组中的所有字段都必须可填充且不受保护。