2017-04-27 49 views
4

我想user_ID的與當前用戶進行轉讓,但它給我這個錯誤常規錯誤:1364字段「USER_ID」沒有默認值

SQLSTATE[HY000]: General error: 1364 Field 'user_id' doesn't have a 
default value (SQL: insert into `posts` (`updated_at`, `created_at`) 
values (2017-04-27 10:29:59, 2017-04-27 10:29:59)) 

這裏是我的方法

//PostController 
Post::create(request([ 
     'body' => request('body'), 
     'title' => request('title'), 
     'user_id' => auth()->id() 
    ])); 

這些fillables

//Post Model 
protected $fillable = ['title', 'body', 'user_id'] 

但是這種方法做的工作

//PostController 
auth()->user()->publish(new Post(request(['title' ,'body']))); 

//Post Model 
public function publish(Post $post) 
{ 
    $this->posts()->save($post); 
} 

任何想法爲什麼這會失敗? enter image description here

+0

很明顯:字段'user_id'沒有默認值。在您的發佈表中,爲user_id設置爲空。或者在遷移$ table-> int('user_id') - > nullable();或者像Saman所說的那樣轉儲auth() - > id的值。順便說一句,我認爲這是auth() - > id沒有括號 –

+0

它似乎'user_id'無法檢索。添加一些數字,而不是'auth() - > id()',並嘗試 – Saman

+0

你是否得到了一些user_id的值,你有dd/echo user_id嗎? –

回答

7

所以,後再次檢查代碼後,我發現了錯誤。 我想知道如何沒有人注意到! 在上面的代碼,我寫

Post::create(request([ <= the error is Here!!! 
    'body' => request('body'), 
    'title' => request('title'), 
    'user_id' => auth()->id() 
])); 

其實,沒有必要請求函數翹曲創建函數體。

// this is right 
Post::create([ 
    'body' => request('body'), 
    'title' => request('title'), 
    'user_id' => auth()->id() 
]); 
+0

jajajaja是啊老兄!!!! – Absolutkarlos

0

嘗試做Auth::id(),像

//PostController Post::create(request([ 'body' => request('body'), 'title' => request('title'), 'user_id' => Auth::id()]));

還記得包括控制器的頂部是App\Http\Controllers\Auth

+0

我不使用Auth門面,但是當我'dd(auth() - > id())'它的工作! –

1

驗證門面嘗試

'user_id' => auth()->id

'user_id' => Auth::user()->id

代替

'user_id' => auth()->id() 
+0

失敗'未定義的屬性:Illuminate \ Auth \ AuthManager :: $ id' –

+0

Auth :: user() - > id的值是什麼? –

+0

值是登錄用戶ID –

-1

使用的print_r(AUTH);

然後看看以哪種方式你user_id說明/ id變量,並用它

0

打開database.php文件,找到'strict'變化值時真亦假,然後再試一次

+0

我試過了,它沒有給我錯誤,但它在數據庫中存儲一個空列! –

+0

對不起,我排隊。 –

0

用戶Auth::user()->id代替。

這是正確的做法:

//PostController 
Post::create(request([ 
    'body' => request('body'), 
    'title' => request('title'), 
    'user_id' => Auth::user()->id 
])); 

如果您的用戶進行身份驗證,然後Auth::user()->id會做的伎倆。

+0

並在控制器中使用身份驗證 –

+0

您也可以在視圖中使用'Auth :: user() - > id'。 – Gammer

+0

@MuhammadRizwan我從開始就不使用Auth門面。我正在關注[laracast](https://laracasts.com/series/laravel-from-scratch-2017/episodes/19)教程,而教師也沒有使用它。 –

0

這似乎是你的數據庫結構中的缺陷。保留標題和正文欄的默認值無。

試試這個:

$user_login_id = auth()->id(); 
Post::create(request([ 
     'body' => request('body'), 
     'title' => request('title'), 
     'user_id' => $user_login_id 
    ])); 
+0

我試過了,它給了我這個錯誤SQLSTATE [HY000]:一般錯誤:1364字段'body'沒有默認值。這就是爲什麼我試圖爲它設置一個默認值。 –

+0

你手動創建這個表嗎?或運行遷移文件? –

+0

我運行了遷移文件。 –

0

這個問題有兩種解決方案。

首先,創建在數據表中設置默認值的字段。它可能是空字符串,這對於在嚴格模式下運行的MySQL服務器來說很好。第二,如果你最近剛剛得到這個錯誤,在MySQL/MariaDB升級之後,就像我做的那樣,並且如果你已經有很多需要修復的大型項目,那麼你所要做的就是編輯MySQL/MariaDB的配置文件(例如/etc/my.cnf)和表禁用嚴格模式:

[mysqld] 
sql_mode=NO_ENGINE_SUBSTITUTION 

此錯誤開始不久以前發生的,由於默認情況下啓用新的嚴格模式。從sql_mode配置鍵中刪除STRICT_TRANS_TABLES,使其與以前一樣工作。

0

在我的情況下,錯誤是因爲我沒有在模型中的$ fillable數組中聲明該字段。那麼,這似乎是一些基本的東西,但對於我們這些從頭開始的人來說,它可以起作用。

1

我是這樣做的:

這是我的PostsController

Post::create([ 

    'title' => request('title'), 
    'body' => request('body'), 
    'user_id' => auth()->id() 
]); 

這是我的帖子模型。

protected $fillable = ['title', 'body','user_id']; 

和嘗試,如果刷新遷移它只是在測試實例

$ php artisan migrate:refresh 

注:遷移:刷新會刪除所有以前的帖子,用戶

-1

刪除請求()方法。它看起來像。

Post::create([ 
     'body' => request('body'), 
     'title' => request('title'), 
     'user_id' => auth()->id() 
    ]); 
+0

這個問題已經回答了。 – Striped

相關問題