2017-07-28 93 views
0

我正在玩弄Laravel中的多態關係。當我嘗試喜歡的東西,我得到一個錯誤:Laravel:多態關係 - 整合約束違規:1048'likeable_id'列不能爲空

Integrity constraint violation: 1048 Column 'likeable_id' cannot be 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

如果我手動輸入'id'。像count()方法那麼完美。 –

回答

0

這是一個SQL限制:一個主鍵列外鍵引用不能爲NULL。

刪除外鍵引用,讓Laravel自己處理關係,你可以有空的關係。


對不起,我在錯誤信息中讀錯了列名。 此問題與關係或外鍵引用沒有任何關係。

這只是您沒有在您的商店請求中指定likeable_id,但也不允許該列在模式創建中爲空。 如果您創建數字列並希望該列在模型中是可選的,則需要在該列的Schema上指定->nullable()或添加默認vlaue。 即使用任一:

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

或:

$table->integer('likeable_id')->unsigned()->default(0); 
+0

但是我想在這裏有帖子id。所以在我的例子中帖子id。 –

+0

對不起,我完全誤解了問題是因爲變量名稱混淆了,我錯誤地將錯誤信息與關係變量(參考文件的一部分)的問題相混淆 編輯我的回覆以解決實際問題 – Mastacheata

+0

嗨Mastacheta,感謝您的回答。設置likeable-> id爲空,我仍然沒有得到post id到數據庫中。likeable_id應該在我的情況下是post_id。 –

0

我有面同樣的問題。查看頁面中的「字段名稱」和數據庫的列名無所謂。我的問題是: "Integrity constraint violation: 1048 Column 'MoneyMethod' cannot be null"。 我的查看頁面輸入標籤:{!! Form::select("MoneyMethod", $MoneymethodInfo, null,["class"=>"form-control MoneyMethod required","id"=>"MoneyMethod"]) !!},請注意我的數據庫表中的'MoneyMethod'的拼寫$table->string('MoneyMethod', 100);錢方法的拼寫與查看頁面相同,但在我的控制器中$riskfund->Moneymethod = Input::get('Moneymethod');仔細查看'Moneymethod'的拼寫與查看頁面和數據庫的不同tabel列。糾正拼寫後,它現在正在工作。

+0

因此,檢查控制器中'likeable_id'的拼寫,它是正確還是錯誤? –

相關問題