我正在使用laravel 10和elongoent创建一个API,我想从http请求中读取的对象复制值到另一个laravel实体对象,我有一个具有许多属性的对象,我想自动将所有属性复制到另一个对象,这样我就可以保存对数据库的更改,而无需使用$obj1->name = $request->将值从请求复制到模型对象中每个属性的名称。
让我解释一下:
我有这门课:
class Usuarios extends Model
{
protected $table = 'usuarios';
protected $primaryKey = 'id';
protected $fillable = [... a lot of properties]
}
我的控制器中有这个方法:
function save(Request $request){
$data = $request->all();
$user = new Usuario($data);
$userFromDB = Usuarios::find($data->id);
// is there a way to do this? I just want to copy properties
// without creating a new object, or is there another way to do this?
// using reflection or something like that? or does laravel have
// any other way to do this without copying each value??
copy_values($user,$userFromDB); //????????????
$userFromDB->save();
}
这可能吗?
谢谢
2条答案
按热度按时间pw136qt21#
您可以使用模型的复制功能。
欢呼
复制模型- Laravel文档
顺便说一句:在你的例子中,没有数据保存到数据库,因为你必须->save()或::create($data)第一个用户。
pnwntuvh2#
如果您习惯使用软件包,则可以使用任何Automapper软件包。我知道Automapper By Mark Gerarts。
否则,使用序列化从一种类型的对象转换为另一种类型的对象是一种较慢的技术。