Helpex - Trao đổi & giúp đỡ Đăng nhập
31

Tôi đang cố gắng gán user_id với người dùng hiện tại nhưng nó gây cho tôi lỗi này

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))

đây là phương pháp của tôi

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

với những thứ này

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

Tuy nhiên, phương pháp này thực hiện công việc

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

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

bất kỳ ý tưởng tại sao điều này không thành công? Lỗi chung: 1364 Trường 'user_id' không có giá trị mặc định [trùng lặp]

31 hữu ích 5 bình luận 178k xem chia sẻ
15 trả lời 15
40

bạn cần phải thay đổi chế độ nghiêm ngặt của cơ sở dữ liệu. để vô hiệu hóa, hãy làm theo bước dưới đây

  1. Mở config/database.php

  2. tìm 'strict'thay đổi giá trị true thành false và thử lại

40 hữu ích 2 bình luận chia sẻ
25

Vì vậy, sau khi xem lại mã, tôi đã tìm thấy lỗi. Tôi đang tự hỏi làm thế nào mà không ai nhận thấy điều đó! Trong đoạn mã trên tôi đã viết

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

thực ra, không cần hàm request làm cong phần thân của hàm create.

// this is right
Post::create([
    'body' => request('body'),
    'title' => request('title'),
    'user_id' => auth()->id()
]);
25 hữu ích 2 bình luận chia sẻ
15

Tôi đã gặp sự cố tương tự với đăng ký Người dùng hôm nay và tôi nhận được

SQLSTATE[HY000]: General error: 1364 Field 'password' doesn't have a default value (SQL: insert into users

Tôi đã sửa nó bằng cách thêm passwordvào mảng $ có thể lấp đầy được bảo vệ của mình và nó đã hoạt động

protected $fillable = [
  'name',
  'email',
  'password',
];

Tôi hi vọng cái này giúp được.

15 hữu ích 1 bình luận chia sẻ
10

Đây là cách tôi đã làm điều đó:

Đây là PostsController của tôi

Post::create([

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

Và đây là Mô hình bài đăng của tôi.

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

Và hãy thử làm mới quá trình di chuyển nếu nó chỉ ở phiên bản thử nghiệm

$ php artisan migrate:refresh

Lưu ý: di chuyển: làm mới sẽ xóa tất cả các bài viết trước đó, người dùng

10 hữu ích 1 bình luận chia sẻ
3

Thử

'user_id' => auth()->id
hoặc là

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

thay vì

'user_id' => auth()->id()
3 hữu ích 3 bình luận chia sẻ
3

Có hai giải pháp cho vấn đề này.

Đầu tiên, là tạo các trường với các giá trị mặc định được đặt trong datatable. Nó có thể là chuỗi trống, điều này tốt cho máy chủ MySQL chạy ở chế độ nghiêm ngặt.

Thứ hai, nếu bạn mới bắt đầu gặp lỗi này gần đây, sau khi nâng cấp MySQL / MariaDB, như tôi đã làm và trong trường hợp bạn đã có dự án lớn với nhiều thứ cần sửa, tất cả những gì bạn cần làm là chỉnh sửa tệp cấu hình MySQL / MariaDB ( ví dụ /etc/my.cnf) và tắt chế độ nghiêm ngặt cho bảng:

[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION

Lỗi này bắt đầu xảy ra gần đây, do chế độ nghiêm ngặt mới được bật theo mặc định. Xóa STRICT_TRANS_TABLESkhỏi sql_modekhóa cấu hình, làm cho nó hoạt động như trước.

3 hữu ích 0 bình luận chia sẻ
3

Hãy thử sử dụng Auth::id(), như

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

cũng hãy nhớ bao gồm mặt tiền Auth ở đầu bộ điều khiển của bạn, App\Http\Controllers\Auth

3 hữu ích 1 bình luận chia sẻ
2

Người dùng Auth::user()->idthay thế.

Đây là cách chính xác:

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

Nếu người dùng của bạn được xác thực, Sau đó Auth::user()->idsẽ thực hiện thủ thuật.

2 hữu ích 5 bình luận chia sẻ
1

Trong trường hợp của tôi, lỗi là do tôi đã không khai báo trường trong mảng $ có thể lấp đầy của mình trong mô hình. Vâng, nó có vẻ là một cái gì đó cơ bản, nhưng đối với chúng tôi, những người bắt đầu với laravel, nó có thể hoạt động.

1 hữu ích 0 bình luận chia sẻ
0

Có vẻ như có lỗ hổng trong cấu trúc cơ sở dữ liệu của bạn. Giữ giá trị mặc định Không có cho tiêu đề và cột nội dung của bạn.

Thử cái này:

$user_login_id = auth()->id();
Post::create(request([
        'body' => request('body'),
        'title' => request('title'),
        'user_id' => $user_login_id
    ]));
0 hữu ích 5 bình luận chia sẻ
0

sử dụng print_r(Auth);

sau đó xem bạn có biến user_id / id ở định dạng nào và sử dụng nó

0 hữu ích 1 bình luận chia sẻ
0

Sử dụng cột cơ sở dữ liệu nullble () trong Laravel. Bạn có thể chọn giá trị mặc định hoặc giá trị nullable trong cơ sở dữ liệu.

0 hữu ích 0 bình luận chia sẻ
0

Lỗi trên có thể là do các biến đầu vào được đặt tên sai từ biểu mẫu dạng xem, điều này phải tìm kiếm giá trị mặc định vì không có biến nào được cung cấp do đó - SQLSTATE [HY000]: Lỗi chung: 1364 Trường 'user_id' không có giá trị mặc định (SQL: insert into posts( updated_at, created_at) các giá trị (2017-04-27 10:29:59, 2017-04-27 10:29:59))

0 hữu ích 0 bình luận chia sẻ
0
$table->date('user_id')->nullable();

Trong tệp của bạn create_file, tùy chọn null phải được bật.

0 hữu ích 0 bình luận chia sẻ
0
 Post::create([
      'title' => request('title'),
      'body' => request('body'),
      'user_id' => auth()->id()
    ]);

bạn không cần request () vì bạn làm điều đó đã kéo giá trị của nội dung và tiêu đề

0 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ php laravel , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading