laravel检索请求输入返回null

时间:2016-07-07 07:54:27

标签: php mysql string laravel null

很抱歉,如果在别处问过这个问题,但我到处搜索但找不到答案。好吧,我在Laravel 5.0上面临这个问题,当我尝试从请求中获取变量时,我在生产服务器上获得 null 值但是我得到了一个开发服务器上的>空字符串。该请求中不存在该值,即在提交表单时该字段为空。例如

echo "<pre>";
    print_r($results);
 echo "</pre>";

当我尝试将对象保存到像

这样的数据库时
// ProductController
public function store(Request $request) {
    // this field is actually empty in the submitted form
    $price = $request->price;
    // when it gets to the server this is how this value looks like :
    // $price in production server : null
    // $price in development server : ''
}

我收到此错误(仅在生产服务器上)

  

SQLSTATE [23000]:完整性约束违规:1048列“价格”   不能为空

请注意,价格列在mysql表

上有'默认0'

为什么会这样?

更新

所有这一次,我认为如果字段不存在,request-&gt; input()方法返回空字符串('')。但只是知道我看了laravel来源看到这个:

Product::save($request->only('name', 'price'));

这里它返回null作为默认值。那为什么我在开发服务器上得到空字符串?

2 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为如果您没有定义任何内容,mysql会插入默认值。在这种情况下,Laravel发送一个值为null。您不应该使用Request::only,而是使用数组。

具体而言总是好的,它使您的代码可读且一致。

答案 1 :(得分:1)

  

输入修剪&amp;归一化

     

默认情况下,Laravel在应用程序的全局中间件堆栈中包含TrimStringsConvertEmptyStringsToNull中间件。这些中间件由App\Http\Kernel类列在堆栈中。这些中间件将自动修剪请求中的所有传入字符串字段,并将任何空字符串字段转换为null。这使您无需担心路由和控制器中的这些规范化问题。

     

如果要禁用此行为,可以从应用程序的中间件堆栈中删除这两个中间件,方法是将它们从$middleware类的App\Http\Kernel属性中删除。

来自:https://laravel.com/docs/5.4/requests#input-trimming-and-normalization