SQLSTATE [23000]:完整性约束冲突:1048列'property_id'在Laravel 5.2中不能为null
我试图解决这个问题,我试图用laravel 5.2中的更新方法编辑多个文件。SQLSTATE [23000]:完整性约束冲突:1048列'property_id'在Laravel 5.2中不能为null
当我跑我的过程,并保存它返回以下错误:
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))
这是我Promperties迁移表和你的关系
<?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!!!');
}
这是$图像=文件之前测试::创建方法,返回以下值:
我试图做的是替换文件并删除它们,以便它们不会累积在存储这些图像的目录中。
您需要验证您的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');
非常感谢Joe,但列不能为空,它是文件和属性的关系。 我尝试更新文件中的注册表并更新图像文件。 应用上次建议会产生相同的错误。 –
所以你检查是否正在填充'$ property_id'变量? – Joe
不,更新时不要填充列,我做了一个dd($ image);在$ image = File :: create之前,返回originalName,mimeType和size,你可以看到上面的更新。 –
尝试更换 $请求 - >获取( 'PROPERTY_ID'); 与---------- $ request - >('property_id'); – ATechGuy
嗨@keaner谢谢,但是当我使用with,save和update方法返回时:BadMethodCallException在Macroable.php中第74行:方法不存在。 –