SQLSTATE [23000]:违反完整性约束:1048 Laravel 5.2中的列"property_id"不能为空 [英] SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'property_id' cannot be null in Laravel 5.2

查看:67
本文介绍了SQLSTATE [23000]:违反完整性约束:1048 Laravel 5.2中的列"property_id"不能为空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试解决这个问题,在这里我尝试使用laravel 5.2中的更新方法来编辑多个文件.

I am trying to solve this problem, where I try to edit multiple files with the update method in laravel 5.2.

运行进程并保存时,将返回以下错误:

When I run my process and save it returns the following error:

QueryException in Connection.php line 729:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'property_id' cannot be null (SQL: insert into `files` (`name`, `property_id`, `updated_at`, `created_at`) values (58bf2825d39d9.jpg, , 2017-03-07 17:37:41, 2017-03-07 17:37:41))

这是我的财产迁移表和您的关系

This is my Promperties Migration Table and your relationships

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreatePropertiesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('properties', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('category_id')->unsigned();
            $table->foreign('category_id')
                  ->references('id')
                  ->on('categories')
                  ->onDelete('cascade');
            $table->integer('term_id')->unsigned();
            $table->foreign('term_id')
                  ->references('id')
                  ->on('terms')
                  ->onDelete('cascade');
            $table->string('address');
            $table->integer('province_id')->unsigned();
            $table->foreign('province_id')
                  ->references('id')
                  ->on('provinces')
                  ->onDelete('cascade');
            $table->string('ctime');//Tiempo de construcción de la propiedad (años).
            $table->string('mconstruction');//Metros de construcción (Mt2).
            $table->string('ground');//Metros de terreno (Mt2).
            $table->string('level');//Nivel/Piso.
            $table->string('elevator');//Asscensores.
            $table->string('price');
            $table->integer('currency_id')->unsigned();            
            $table->foreign('currency_id')
                  ->references('id')
                  ->on('currencies')
                  ->onDelete('cascade');
            $table->integer('client_id')->unsigned();            
            $table->foreign('client_id')
                  ->references('id')
                  ->on('clients')
                  ->onDelete('cascade');
            $table->softDeletes();
            $table->timestamps();
        });

        DB::update("ALTER TABLE properties AUTO_INCREMENT = 1000;");
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('properties');
    }
}

这是我的文件迁移表和您的关系

This is my File Migration Table and your relationships

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateFilesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('files', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->integer('property_id')->unsigned();
            $table->foreign('property_id')
                  ->references('id')
                  ->on('properties')
                  ->onDelete('cascade');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('files');
    }
}

这是我的财产模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

use Illuminate\Database\Eloquent\SoftDeletes;

class Property extends Model
{
    use SoftDeletes;

    protected $dates = ['deleted_at'];

    protected $table = 'properties';

    protected $fillable = ['category_id', 'term_id', 'address', 'ctime', 'mconstruction', 'ground', 'level', 'elevator', 'price', 'currency_id', 'province_id', 'client_id'];

    // Relation with Category
    public function category()
    {
        return $this->belongsTo('App\Category');
    }

    // Relation with Term
    public function term()
    {
        return $this->belongsTo('App\Term');
    }

    // Relation with Province
    public function province()
    {
        return $this->belongsTo('App\Province');
    }

    // Relation with Client
    public function client()
    {
        return $this->belongsTo('App\Client', 'client_id');
    }

    // Relation with Currency
    public function currency()
    {
        return $this->belongsTo('App\Currency');
    }

    // Relation with Municipality
    public function municipality()
    {
        return $this->belongsTo('App\Municipality');
    }

    // Relation with File
    public function files()
    {
        return $this->hasMany('App\File');
    }

    public function scopeSearch($query, $search) {
        return $query
            ->where('category_id', 'like', "%" . $search . "%")            
            ->orWhere('address', 'like', "%" . $search . "%")
            ->orWhere('price', 'like', "%" . $search . "%");
    }
}

这是我的文件模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

use Illuminate\Database\Eloquent\SoftDeletes;

class File extends Model
{
    protected $table = 'files';

    protected $fillable = ['name', 'property_id'];

    // Relation with Property
    public function property()
    {
        return $this->belongsTo('App\Property');
    }
}

在这里,我向我的控制器显示问题所在的部分

And here I show part of my controller where the problem is

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use Intervention\Image\Exception\NotReadableException;

use Illuminate\Support\Facades\Input;

use App\Http\Requests;
use App\Client;
use App\Category;
use App\Term;
use App\Province;
use App\Municipality;
use App\Property;
use App\Currency;
use App\User;
use App\File;
use Image;
use View;

class PropertyController extends Controller
{    
    public function update(Request $request, $id)
    {
        //dd($request->input());

        $updated = Property::findorFail($id);

        $properties = $request->all();

        $property_id = $request->get('property_id');

        $updated->fill($properties)->save();

        // -- Images update method -- //

        $images = $request->file('avatar'); 

        foreach ($images as $image) 
        {
            $rules = array(
                'avatar' => 'required|mimes:png,gif,jpeg,jpg|max:20000'
            );

            $validator = \Validator::make(array('avatar'=> $image), $rules);

            if (! $validator->passes())
            {
                return redirect()->back()->withErrors($validator);
            }

            $extension = $image->getClientOriginalExtension();
            $filename = uniqid() . '.' . $extension;
            $path = public_path() . 'uploads/products/';

            //dd($extension);

            Image::make($image)->resize(300, 200)->save( public_path('uploads/products/' . $filename ) );

            //Move file into uploads folder 
            $image->move($path, $filename);
            //Insert file name in db

            //dd($image);

            $image = File::create([ 
                'name'        => $filename,
                'property_id' => $property_id
            ]);

        }

        // -- End method -- //

        return redirect()->route('properties.index')
                         ->with('success','Propiedad actualizada satisfactoriamente!!!');
    }

这是在$ image = File :: create方法之前进行的测试,返回以下值:

This is a test before the $ image = File :: create method, returns the following values:

我想做的是替换文件并删除它们,以便它们不会累积在存储这些图像的目录中.

What I try to do is replace the files and delete them so they do not accumulate in the directory that stores these images.

推荐答案

您需要验证是否在表单请求中发送了property_id.如果您错过添加它,将其添加为隐藏字段.

You need to verify that your property_id is been sent in your form request. Add it as hidden field in case you missed to add it.

  <Input  type="hidden"  name="property_id" value="{{$properties->id}}" >

这篇关于SQLSTATE [23000]:违反完整性约束:1048 Laravel 5.2中的列"property_id"不能为空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆