2017-09-15 39 views
0

提供雄辯的東西傳遞給數據庫Laravel /雄辯 - 列名作爲變量

$table_name = new TableName; 
$table_name->column_name = "some data"; 
$table_name->save(); 

我已經得到了很多從需要驗證表單數據的便捷方式,所以我很想知道是否可以用變量替換列名,所以我可以把它放在一些循環中,並從數組中獲取名稱和數據。

$table_name->$columns[$i] = $data[$i]; 

(雖然我想不寫的方式)

更新

最後,我已經走了下列要求:

$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(); 
+0

如果驗證您需要完成,請查看[Laravel驗證](https://laravel.com/docs/5.5/validation),這可以爲您節省大量'if's – apokryfos

回答

0

,你可以做一個這些:

1)的值來創建

$table_name = new TableName([ 
     "column_name" => "column_value" 
    ]); 

2)填寫

$table_name = new TableName(); 
$table_name->fill([ 
    "column_name" => "column_value" 
]); 

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 
} 

請注意,要做1或2您放入數組中的所有字段必須是可填充的,而不是守護的。

+0

Thx!我已經去了第三種選擇的變體,因爲我需要在設置值之前添加更多的邏輯(邏輯總是相同的,這就是爲什麼我問這個問題。 – MrEvers

1

你可以用它像聯合陣列:

$table_name['column_name'] 
$column_name = 'column_name'; 
$table_name[$column_name]; 

或者你可以循環它們的屬性

foreach($table_name->getAttributes() as $value => $key){ 
    echo "The attr ".$key." has this value: ".$value; 
    }