Laravel:Polymorphic Relation -Integrity约束违规:1048列'likeable_id'不能为null

时间:2017-07-28 17:39:46

标签: php laravel eloquent polymorphism

我正在玩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');

        });

2 个答案:

答案 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列不同。纠正拼写后,它现在正在运行。