簡體   English   中英

SQLSTATE[23000]:違反完整性約束:1048 列“property_id”在 Laravel 5.2 中不能為空

[英]SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'property_id' cannot be null in Laravel 5.2

我正在嘗試解決這個問題,我嘗試在 laravel 5.2 中使用 update 方法編輯多個文件。

當我運行我的進程並保存它時,會返回以下錯誤:

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 方法之前的一個測試,返回以下值:

在此處輸入圖片說明

我嘗試做的是替換文件並刪除它們,這樣它們就不會堆積在存儲這些圖像的目錄中。

您需要驗證您的 property_id 是否已在您的表單請求中發送。 如果您錯過添加它,請將其添加為隱藏字段。

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

您看到的錯誤是因為files表上的列property_id不可為空。

如果您希望此列接受空值,則需要在遷移中允許:

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

當然,您可能不希望該值為空,所以...

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

您確定在上面的行中填充了$property_id變量嗎? 不應該是:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM