我正在尝试为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()
]));
使用这些填充
//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);
}
答案 0 :(得分:14)
所以,在再次检查代码之后,我发现了错误。 我想知道没有人注意到这一点! 在上面的代码我写了
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()
]);
答案 1 :(得分:9)
您需要更改数据库严格模式。禁用按照以下步骤
打开database.php
查找'strict'
将值true更改为false,然后重试
答案 2 :(得分:4)
以下是我的表现:
这是我的PostsController
Post::create([
'title' => request('title'),
'body' => request('body'),
'user_id' => auth()->id()
]);
这是我的帖子模型。
protected $fillable = ['title', 'body','user_id'];
如果只是在测试实例
上,请尝试刷新迁移$ php artisan migrate:refresh
注意:migrate:refresh将删除所有以前的帖子,用户
答案 3 :(得分:2)
尝试
'user_id' => auth()->id
或
'user_id' => Auth::user()->id
而不是
'user_id' => auth()->id()
答案 4 :(得分:2)
我今天在用户注册时遇到了类似的问题,而且我得到了一个
SQLSTATE[HY000]: General error: 1364 Field 'password' doesn't have a default value (SQL: insert into `users`
我通过将password
添加到受保护的$ fillable数组来修复它,并且它可以正常工作
protected $fillable = [
'name',
'email',
'password',
];
我希望这会有所帮助。
答案 5 :(得分:1)
尝试<table>
<thead>
<tr>
<th>Header tableData</th>
<th>Header tableData</th>
<th>Header tableData</th>
<th>Header tableData</th>
<th>Header tableData</th>
</tr>
</thead>
<tbody id="append">
</tbody>
</table>
,例如
window.addEventListener("load",function(){
if(typeof sessionStorage.firstrows=='undefined'){
sessionStorage.firstrows=0; //first
}else{
sessionStorage.firstrows=0;
}
if(typeof sessionStorage.lastrows=='undefined'){
sessionStorage.lastrows=100; //LIMIT
}else{
sessionStorage.lastrows=100;//LIMIT
}
viewdata(sessionStorage.firstrows,sessionStorage.lastrows);
window.onscroll = function(ev) {
if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) {
viewdata(sessionStorage.firstrows,sessionStorage.lastrows);
}
};
function viewdata(firstrows,lastrows){
//##### AJAX HERE
//---- Do pull the data already in the Limit ----
//##### END AJAX
//## Callback function from ajax
var count_row = 5000; //Amount of data
var tbody = document.getElementById('append');
if(lastrows > count_row){
last_= count_row;
}else{
last_= lastrows;
alert("Append New Row ("+sessionStorage.firstrows+" To "+sessionStorage.lastrows+")");
}
for (key =firstrows;key<last_;key++) {
var tr = document.createElement('tr');
var html = "";
tr.setAttribute("class", 'tableRow');
html += "<td class='tableData'>"+key+"</td>";
html += "<td class='tableData'>b</td>";
html += "<td class='tableData'>c</td>";
html += "<td class='tableData'>d</td>";
html += "<td class='tableData'>e</td>";
tr.innerHTML = html;
tbody.appendChild(tr); //append to tbody
}
if(lastrows > count_row){
alert("END");
}else{
sessionStorage.firstrows = last_;
sessionStorage.lastrows = (parseInt(last_)+100);
}
}
});
还要记住在控制器顶部包含Auth外观,Auth::id()
答案 6 :(得分:1)
使用print_r(Auth);
然后看看你有user_id / id变量的格式并使用它
答案 7 :(得分:1)
用户Auth::user()->id
代替。
这是正确的方法:
//PostController
Post::create(request([
'body' => request('body'),
'title' => request('title'),
'user_id' => Auth::user()->id
]));
如果您的用户已通过身份验证,则Auth::user()->id
即可完成此操作。
答案 8 :(得分:1)
这个问题有两种解决方案。
首先,创建具有在datatable中设置的默认值的字段。它可能是空字符串,这对于在严格模式下运行的MySQL服务器来说很好。
其次,如果你刚刚开始得到这个错误,那么在MySQL / MariaDB升级之后,就像我一样,如果你已经有很多需要修复的大型项目,你需要做的就是编辑MySQL / MariaDB配置文件(例如/etc/my.cnf
)并禁用表的严格模式:
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION
由于默认情况下启用了新的严格模式,此错误最近才开始发生。从STRICT_TRANS_TABLES
配置密钥中删除sql_mode
,使其像以前一样工作。
答案 9 :(得分:0)
这似乎是您数据库结构中的缺陷。保持标题和正文列的默认值为无。
试试这个:
$user_login_id = auth()->id();
Post::create(request([
'body' => request('body'),
'title' => request('title'),
'user_id' => $user_login_id
]));
答案 10 :(得分:0)
就我而言,错误是因为我没有在模型中的$ fillable数组中声明该字段。嗯,它似乎是基本的东西,但对于我们从laravel开始它可以工作。
答案 11 :(得分:0)
Post::create([
'title' => request('title'),
'body' => request('body'),
'user_id' => auth()->id()
]);`enter code here`
您不需要request()时已经提取了body和title的值
答案 12 :(得分:0)
在Laravel中使用数据库列nullble()。您可以在数据库中选择默认值或可为空的值。
答案 13 :(得分:0)
上述错误可能是由于视图表单中的输入变量名称错误导致的,由于未提供任何变量,因此求助于默认值-SQLSTATE [HY000]:常规错误:1364字段“ user_id”没有没有
默认值(SQL:插入posts
(updated_at
,created_at
)
值(2017-04-27 10:29:59,2017-04-27 10:29:59))
答案 14 :(得分:0)
$table->date('user_id')->nullable();
在文件create_file
中,必须启用null选项。
答案 15 :(得分:-1)
删除request()方法。它看起来像。
Post::create([
'body' => request('body'),
'title' => request('title'),
'user_id' => auth()->id()
]);