我正在玩Laravel中的多态关系。当我试图喜欢某事时,我得到一个错误:
完整性约束违规:1048列'likeable_id'不能 null - Error Image
如果我将likeable_id添加到null,那么likeable_id为空:SQL DB
赞模特
public function likeable()
{
return $this->morphTo();
}
发布模型
public function likes()
{
return $this->morphMany(Like::class, 'likeable');
}
PostLikeController
public function store(Request $request, Place $topic, Post $post)
{
$like = new Like;
$like->user()->associate($request->user());
$post->likes()->save($like);
return redirect()->route('web.consumer.post.index');
}
迁移
Schema::create('likes', function (Blueprint $table) {
$table->increments('id');
$table->integer('likeable_id')->unsigned();
$table->string('likeable_type');
$table->integer('user_id')->unsigned()->index();
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
答案 0 :(得分:1)
这是一个SQL限制:对主键列的外键引用不能为NULL。
删除外键引用并让Laravel自己处理关系,你可以有空关系。
抱歉,我在错误消息中读取了错误的列名。 此问题与关系或外键引用完全无关。
只是您没有在商店请求中指定likeable_id,但在模式创建中也不允许该列为null。
如果您创建数字列并希望该列在模型中是可选的,则需要在该列的Schema上指定->nullable()
或添加默认值。
即使用:
$table->integer('likeable_id')->unsigned()->nullable();
或:
$table->integer('likeable_id')->unsigned()->default(0);
答案 1 :(得分:0)
我面临同样的问题。视图页面中的“字段名称”和数据库的列名称无关紧要。我的问题是:
"Integrity constraint violation: 1048 Column 'MoneyMethod' cannot be null"
。
我的查看页面输入标记:{!! Form::select("MoneyMethod", $MoneymethodInfo, null,["class"=>"form-control MoneyMethod required","id"=>"MoneyMethod"]) !!}
,注意我的数据库表$table->string('MoneyMethod', 100);
中拼写为'MoneyMethod'的拼写方法与查看页面相同但在我的控制器中$riskfund->Moneymethod = Input::get('Moneymethod');
仔细查看'Moneymethod'的拼写与视图页面和数据库tabel列不同。纠正拼写后,它现在正在运行。