Php Laravel-通过API在数据库中存储新记录
我想通过API在我的数据库中创建一个新记录,但我从Postman那里得到了错误“消息”:“数组到字符串转换(SQL:insert into…) API路线:Php Laravel-通过API在数据库中存储新记录,php,laravel,eloquent,Php,Laravel,Eloquent,我想通过API在我的数据库中创建一个新记录,但我从Postman那里得到了错误“消息”:“数组到字符串转换(SQL:insert into…) API路线: Route::post('/posts','PostController@store'); 控制器中的存储功能: public function store(Request $request) { $post= new Post; $post->all = $request->all
Route::post('/posts','PostController@store');
控制器中的存储功能:
public function store(Request $request)
{
$post= new Post;
$post->all = $request->all();
$post->save();
}
首先,检查您的
post#all
字段类型。如果它是数据库字段,则只能设置相同类型的数据,例如,对于字符串类型,只能设置php字符串
如果它不是一个字段,但您想设置从请求到模型的所有属性,那么可以使用model::create($request->all())
来完成
但是,在执行此操作之前,您需要指定
或模型上的保护属性,因为所有雄辩的模型都保护
默认情况下,不使用质量指定
-质量分配
换句话说,to可以在modelfillable
中定义一个属性,该属性将是一个数组,并包含可批量分配的字段(以您的方式-来自请求的字段)
最好使用
$request->only()
并只提供您希望从请求中获取的数据,这将减少用户错误导致问题的可能性,如$request->all()
将包括任何输入数据,包括查询字符串。首先,检查您的post#all
字段类型。如果它是数据库字段-您只能设置相同类型的数据,例如,对于字符串类型,您只能设置php字符串
如果它不是一个字段,但您想设置从请求到模型的所有属性,那么可以使用model::create($request->all())
来完成
但是,在执行此操作之前,您需要指定
或模型上的保护属性,因为所有雄辩的模型都保护
默认情况下,不使用质量指定
-质量分配
换句话说,to可以在modelfillable
中定义一个属性,该属性将是一个数组,并包含可批量分配的字段(以您的方式-来自请求的字段)
最好使用
$request->only()
并只提供您希望从请求中获取的数据,这将减少用户错误导致问题的可能性,如$request->all()
将包括任何输入数据,包括查询字符串。什么类型的全部
是?它是一个数据库字段,或者您想以这种方式将所有请求字段设置为模型属性?如果您想从请求中设置所有字段,您需要$post->fill($request->all);
$post->all只是一个属性(表示一个列)您不能将请求中的数组分配给该属性。我怎么做?为什么不使用普通列作为值?但请记住,filleble
属性必须具有用于批量分配的文件数组。有关更多详细信息,请参阅-mass assignmentall
的类型是什么?它是一个数据库字段或者您想以这种方式将所有请求字段设置为模型属性?如果您想从请求中设置所有字段-您需要$post->fill($request->all);
$post->all只是一个属性(表示列)您无法将请求中的数组分配给该属性。我如何才能这样做?为什么不使用普通列作为值?但请记住,filleble
属性必须具有用于批量分配的文件数组。有关更多详细信息,请参阅-massAssignment@AndrewWillislaravel有检索的方法吗只有像symfony$request->request
这样的POST数据?我不知道,尽管盲目使用用户提供的所有数据并不是明智之举,因为任何人都可以添加POST数据。任何人也可以将JSON内容发送到API端点,所以在使用验证后,我发现最好的方法是转到$request->only()
并且只使用我期望从用户那里得到的字段。@Andrewills我同意过滤数据是安全性的又一步,但是控制器变得有点混乱。通常我认为控制器不应该知道模型有什么字段。也许最好为模型设置静态的字段
属性和可更改的属性。并且当将模型中的filleble
属性设置为该fields
时,控制器将具有model::create($request->only(model::fields));
。这怎么样?@AndrewWillis或其他解决方案可以从symfony获得。它在一个字段中有一个表单字段数组。例如,如果模型是Post,表单字段“title”将有namePost[title]
。然后控制器将有model::create($request->get('Post'))
任何类似方法的问题在于,模型/请求/控制器都需要以某种方式相互了解。这是为什么使用存储库和实体/边界/交互方法的完美例子,其中所有内容都委托给应用程序,这远远超出了问题的范围@AndrewWillis laravel是否有一种只检索POST数据的方法,比如symfony$request->request
?我不知道,尽管盲目使用用户提供的所有数据并不是明智之举,因为任何人都可以添加POST数据。任何人也可以将JSON内容发送到API端点,因此在使用验证后,我找到了最佳方法h是去$request->only()
并且只使用我期望从用户那里得到的字段。@Andrewills我同意过滤数据是安全性的又一步,但是控制器变得有点混乱。通常我认为控制器不应该知道模型有什么字段。也许最好为模型设置静态的字段
属性和可更改的属性。并且如果将模型中的filleble
属性设置为该字段
。那么控制器将具有model::create($request->only(model::fields));
。这如何?@AndrewWillis或其他解决方案可以从symfony获得。它在