SQLSTATE [23000]:违反完整性约束:1048在Laravel 5.2中,列'property_id'不能为null

问题描述 投票:2回答:3

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

当我运行并保存过程时,返回以下错误:

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))

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

<?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');
    }
}

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

<?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');
    }
}

在这里,我展示了控制器的部分问题所在

<?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方法之前的测试,返回以下值:

enter image description here

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

php mysql laravel laravel-5 laravel-5.2
3个回答
2
投票

您需要验证您的property_id是在表单请求中发送的。如果您错过添加它的操作,则将其添加为隐藏字段。

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

1
投票

您看到的错误是因为property_id表上的files列不可为空。

如果您希望此列接受空值,则需要在迁移中允许它:

 $table->integer('property_id')->unsigned()->nullable();

当然,您可能不希望该值为null,所以...

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

您确定在上一行中填充了$property_id变量吗?应该不是:

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

0
投票

SQLSTATE [23000]:违反完整性约束:1048列'c_nm'不能为空(SQL:插入categoryc_nm)值(?))从3天开始我的项目中发生Theis错误我重新创建了我的整个项目,并且新表也存在,但是发生了同样的问题。现在请帮助我,说我现在该怎么办???

© www.soinside.com 2019 - 2024. All rights reserved.