使用Eloquent / Laravel 5.x通用创建Model / DB条目

时间:2018-03-08 18:31:57

标签: php laravel-5 eloquent

我正在尝试构建一个非常通用的函数,当id值为空或无法找到时,它会接收模型名称,id和值数组以更新现有模型或创建新模型(在我的情况下)

我遇到的问题是我找不到像我通常那样通用创建新模型的正确方法:$mymodel = new Mymodel();

这是该功能的相关部分。它不起作用,我已经挖掘到Illuminate\Database文件夹

中的代码
// lets get the model and then we update and save
$model = DB::table($request->input("model")."s")->where('id',$request->input("id"))->first();

if(!$model){
   $model = DB::table($request->input("model")."s")->new();
}

 // This part is not tested yet, but this part should set all the 
 // values from an Array of JSON objects, I will get that part to work
 foreach(json_decode($request->input("values")) as $value){
     $model->attributes[$value->name] = $value->value;
 } 

有没有人知道如何以最简单的方式完成这项工作?我真的不想在单独的函数中注册我拥有的所有模型并在那里创建它。如果可能的话,我想让它保持超级通用。

2 个答案:

答案 0 :(得分:2)

您可以做一些事情但确保验证并清理您的用户输入。

$modelClass = "App\\{$request->input('model')}";
$model = new $modelClass;

答案 1 :(得分:0)

受@joelrosenthal的回答启发,这是完整的工作代码,我希望能帮到某人:我的模型在子文件夹中。

$modelClass = "\App\\".ucwords($request->input("model"));
if(!class_exists($modelClass)){
    $modelClass = "\App\\WFEModels\\".ucwords($request->input("model"));
}
// lets get the model and then we update and save
$model = $modelClass::where('id', $request->input("id"))->first();
// create new Instance if not found
if(!$model){
  $model = new $modelClass();
}
// fill values
foreach($request->input("values") as $value){
    $model[$value['name']] = $value['value'];
}
// save model
$model->save();