我的数据库中有一个名为images的外键。
这是它的迁移:
class CreateImagesTable extends Migration
{
public function up()
{
Schema::create('images', function (Blueprint $table) {
$table->increments('id');
$table->integer('product_id')->unsigned();
$table->integer('product_r_id')->unsigned();
$table->string('name', 50);
$table->text('images', 50);
$table->foreign('product_id')->references('id')->on('products')->onDelete('cascade')->onUpdate('cascade');
$table->timestamps();
});
Schema::table('images', function (Blueprint $table) {
$table->foreign('product_r_id')->references('id')->on('products_r')->onDelete('cascade')->onUpdate('cascade');
});
}
public function down()
{
Schema::drop('images');
}
}
它的模型看起来像这样:
class Images extends Model
{
protected $table = 'images';
protected $fillable = ['product_id', 'product_r_id', 'name', 'images'];
public function product()
{
return $this->belongsTo('App\Product', 'product_id');
}
public function productR()
{
return $this->belongsTo('App\ProductR', 'product_r_id');
}
}
ProductR Model看起来像这样:
class ProductR extends Model
{
protected $table = 'products_r';
protected $fillable = ['email', 'title', 'filename', 'inputMpg', 'number_of_chapters'];
public function images()
{
return $this->hasMany('App\Images');
}
}
和这样的产品型号:
class Product extends Model
{
protected $table = 'products';
protected $fillable = ['email', 'title', 'filename', 'inputMpg', 'number_of_chapters'];
public function scenesImages()
{
return $this->hasMany('App\Images');
}
}
所以我基本上尝试将两种不同形式的不同产品与其图像保存在我的数据库(图像)中的同一个表中。
运行我的程序会返回以下错误:
Connection.php第655行中的QueryException:SQLSTATE [23000]:完整性 约束违规:1452无法添加或更新子行:异类 键约束失败(
mydb
。images
,CONSTRAINTimages_product_id_foreign
FOREIGN KEY(product_id
)参考products
(id
)ON DELETE CASCADE ON UPDATE CASCADE)(SQL:insert 进入images
(name
,images
,product_r_id
,updated_at
,created_at
)值(ki,0Chrysanthemum.jpg,10,2016-05-20 10:50:51, 2016-05-20 10:50:51))
答案 0 :(得分:1)
我认为问题出现的原因是:
$table->integer('product_id')->unsigned();
[...]
$table->foreign('product_id')->references('id')->on('products')->onDelete('cascade')->onUpdate('cascade');
你不能只是在没有填写product_id
的情况下创建图像,因为错误
insert into images (name, images, product_r_id, updated_at, created_at) ...
表示您正在插入images
而没有product_id
且不能为空且具有外键约束。
我想你可以做一个
$table->integer('product_id')->unsigned()->nullable();
所以你不需要在插入时分配它。