【问题标题】:Getting null when storing data in Laravel 5在 Laravel 5 中存储数据时获取 null
【发布时间】:2015-11-29 04:18:45
【问题描述】:

当我将数据存储到数据库时,某处的某个字段消失了。

这是我的代码:

    public function artStore(FacilityRequest $request)
{
    $art = new Facility;

    $art->category()->attach($request->input('categories_list'));

    if(Input::hasfile('image'))
    {
    $request->file('image')->move(public_path('images/art/'), $request->file('image')->getClientOriginalName());

    $art->image = 'images/art/' . $request->file('image')->getClientOriginalName();
    }

    $art = Facility::create($request->all());

}

类别附加良好,但$art 本身变为空。谁能告诉我为什么?

这是错误:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'facility_id' cannot be null (SQL: insert into `category_facility_facility` (`category_facility_id`, `facility_id`) values (2, ))

当我执行 dd($request); 时会发生这种情况

  +query: ParameterBag {#289 ▼
    #parameters: []
  }
  +server: ServerBag {#293 ▼
    #parameters: array:30 [▼
      "DOCUMENT_ROOT" => "C:\xampp\htdocs\uzdarbis\laravel\public"
      "REMOTE_ADDR" => "::1"
      "REMOTE_PORT" => "57855"
      "SERVER_SOFTWARE" => "PHP 5.6.12 Development Server"
      "SERVER_PROTOCOL" => "HTTP/1.1"
      "SERVER_NAME" => "localhost"
      "SERVER_PORT" => "8888"
      "REQUEST_URI" => "/create-art-work"
      "REQUEST_METHOD" => "POST"
      "SCRIPT_NAME" => "/index.php"
      "SCRIPT_FILENAME" => "C:\xampp\htdocs\uzdarbis\laravel\public\index.php"
      "PATH_INFO" => "/create-art-work"
      "PHP_SELF" => "/index.php/create-art-work"
      "HTTP_HOST" => "localhost:8888"
      "HTTP_CONNECTION" => "keep-alive"
      "HTTP_CONTENT_LENGTH" => "13360"
      "HTTP_CACHE_CONTROL" => "max-age=0"
      "HTTP_ACCEPT" => "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
      "HTTP_ORIGIN" => "http://localhost:8888"
      "HTTP_UPGRADE_INSECURE_REQUESTS" => "1"
      "HTTP_USER_AGENT" => "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36"
      "HTTP_CONTENT_TYPE" => "multipart/form-data; boundary=----WebKitFormBoundaryF4qxwnPWgFSBZl7r"
      "HTTP_REFERER" => "http://localhost:8888/facilities/add-new"
      "HTTP_ACCEPT_ENCODING" => "gzip, deflate"
      "HTTP_ACCEPT_LANGUAGE" => "lt,en-US;q=0.8,en;q=0.6,ru;q=0.4,pl;q=0.2"
      "HTTP_COOKIE" => "XSRF-TOKEN=eyJpdiI6IlByRUloN3djVVgxWDZ2MmpEN0lZRWc9PSIsInZhbHVlIjoiSU5lNkZieWcrY01KTG05Q3M5YmswcHNSQ3A0N05DQ2loTXVWbmszdnZldEl4TytMVkdZMTRYYUIwQjAxdEwwdmRjWFZTMnZtMzkzZUtMZHhnUE5nZWc9PSIsIm1hYyI6IjRjMDEzZTEzNzA0N2M1NWFhNmVlMTQ5Mjc5YmI0MjIzODc0NTRhZGJmZDkyNjJlMTk4ZTM0ZjEwMDc1YTRkMzEifQ%3D%3D; laravel_session=eyJpdiI6IlNPb3I3OHZqejVHOGg3V0FjWm9naGc9PSIsInZhbHVlIjoiSXkrcVhVRnJmXC9EVEVJOUJwR0hhYzZDVkZxcXh1V3NVUDM4RkdiNmQrZThwV0VPeklIZWxwSmNyeHp1NThBbm1rOXNLY0Q1S29xVDJNMmo4XC9RalBlQT09IiwibWFjIjoiMjNhMjE4NmUyMTUwZWE5YTJkYjhlMzU0ZWI3ODNhOTVmNzdiZTc1NWEwYjE5NzYzNDg0NzQ5N2U0Yjk3Njg1NCJ9"
      "REQUEST_TIME_FLOAT" => 1448714404.5915
      "REQUEST_TIME" => 1448714404
      "CONTENT_LENGTH" => "13360"
      "CONTENT_TYPE" => "multipart/form-data; boundary=----WebKitFormBoundaryF4qxwnPWgFSBZl7r"
    ]
  }

这是我的表格:

      <div class="formaIkelimo" style="width: 60%; margin: 0 auto"> 
    {!! Form::open(['url' => '/create-art-work/', 'files' => 'true']) !!}

    <div class="form-group">
            {!! Form::label('categories_list', 'Kategorija') !!}
            {!! Form::select('categories_list[]', $categories, null, ['id' => 'categories_list','class' => 'form-control']) !!}
    </div>

  <div class="form-group">

    <label>Photo</label>
    <input type="file" name="image" id="image" class="form-control">
  </div>    

    <div class="form-group">
    {!! Form::submit('Upload', ['class' => 'form-control btn btn-success']) !!}
    </div>

    {!! Form::close() !!}

    </div>

【问题讨论】:

  • 错误消息显示,您没有为列facility_id 发送数据。试试这个来检查你发送到数据库dd($request-&gt;all()) 的数据在你的整个问题中我没有看到你发送给facility_id 的任何数据。如果您的 dd($request-&gt;all()) 返回您正在为 facility_id 发送数据,例如:'facility_id'=&gt;'someDataNotNull',请确保您提到 facility_id 在您的模型中是质量分配。例如:protected $fillable = ['category_facility_id','facility_id','someMoreIfNeede'];

标签: php laravel


【解决方案1】:

据我所知,您发送的不是整数而是其他内容。我认为数据库需要一个整数。

你能用吗:

public function artStore(FacilityRequest $request)
{
    dd($request);
}

查看请求包含的内容?

【讨论】:

  • 您能否通过单击它们后面的 ▶ 打开属性、查询和服务器,并查看它们包含的值。同时添加您的表单以获取更多信息。
  • 以我只看到 ['id' => 'categories_list','class' => 'form-control'] 的形式,假设这发送 category_list id。但我没有看到设施 ID 的任何内容,解释了为什么它是空的
  • 好的,现在我明白了。如何将“id”字段添加到 输入?
  • 我认为您不能从图像本身中获取它,但如果您在文件名中使用设施 ID,则可以从文件名中获取,但我不建议这样做。为什么不添加另一个选择字段,以便用户选择设施(就像您对类别列表所做的那样)
【解决方案2】:

错误是因为您试图将类别附加到任何内容。这是导致错误的原因:

$art = new Facility;
$art->category()->attach($request->input('categories_list'));

Art 是 Facility 的一个实例。它还没有输入到数据库中,所以它没有id。当您尝试附加类别时,facility_id 为空。这导致了你的错误。处理此问题的最佳方法是在最后附加它 - 在您创建设施之后:

public function artStore(FacilityRequest $request)
{
    $art = new Facility;

    if(Input::hasfile('image'))
    {
         $request->file('image')->move(public_path('images/art/'), $request->file('image')->getClientOriginalName());

         $art->image = 'images/art/' . $request->file('image')->getClientOriginalName();
    }

    $art = Facility::create($request->all());

    $art->category()->attach($request->input('categories_list'));
}

这是假设您的请求输入是正确的。下一次,你应该dd($request-&gt;all()) 而不是$request

编辑:我还意识到您的image 属性不会使用您当前的方法正确保存。我建议这样做,这样也更干净一些:

public function artStore(FacilityRequest $request)
{
    if(Input::hasFile('image'))
    {
         $request->file('image')->move(public_path('images/art/'), $request->file('image')->getClientOriginalName());

         $request->merge(['image' => 'images/art/' . $request->file('image')->getClientOriginalName()]);
    }

    $art = Facility::create($request->all());

    $art->category()->attach($request->input('categories_list'));
}

文件移动到指定区域后,merge 方法基本上用新值覆盖image 属性。这样,您可以在一行的最后创建 Facility 对象。然后,附加类别。

【讨论】:

  • 然后我得到一个错误。 SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行
  • 你的表结构是什么样的?它生成什么 SQL 查询?给我们更多的信息。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
  • 2015-09-01
  • 2015-06-18
  • 1970-01-01
  • 2021-04-23
相关资源
最近更新 更多