Jac*_*cob 14 php laravel eloquent laravel-5 laravel-5.5
更新我的Post模型时,我运行:
$post->title = request('title');
$post->body = request('body');
$post->save();
Run Code Online (Sandbox Code Playgroud)
这并没有更新我的职务.但它应该根据Laravel文档更新Eloquent模型.为什么我的模型没有更新?
save成功是true.Post 模型:
class Post extends Model
{
protected $fillable = [
'type',
'title',
'body',
'user_id',
];
....
}
Run Code Online (Sandbox Code Playgroud)
Post 控制器:
public function store($id)
{
$post = Post::findOrFail($id);
// Request validation
if ($post->type == 1) {
// Post type has title
$this->validate(request(), [
'title' => 'required|min:15',
'body' => 'required|min:19',
]);
$post->title = request('title');
$post->body = request('body');
} else {
$this->validate(request(), [
'body' => 'required|min:19',
]);
$post->body = request('body');
}
$post->save();
return redirect('/');
}
Run Code Online (Sandbox Code Playgroud)
运行dd($post->save())回报true.
运行
$post->save();
$fetchedPost = Post::find($post->id);
dd($fetchedPost);
Run Code Online (Sandbox Code Playgroud)
$fetchedPost在没有更新数据的情况下向我显示与之前相同的帖子.
我有同样的结果,因为我正在过滤没有主键的输出列。
$rows = MyModel::where('...')->select('col2', 'col3')->get();
foreach($rows as $row){
$rows->viewed = 1;
$rows->save();
}
Run Code Online (Sandbox Code Playgroud)
固定与
$rows = MyModel::where('...')->select('primary_key', 'col2', 'col3')->get();
Run Code Online (Sandbox Code Playgroud)
在审查时非常有意义,如果没有可用的主键,更新命令将为 Null。
我遇到了同样的问题,改变获取模型的方式解决了它!
尽管一切都应该像您提到的那样工作,但没有保存:
$user = User::find($id)->first();
Run Code Online (Sandbox Code Playgroud)
这是工作:
$user = User::find($id);
Run Code Online (Sandbox Code Playgroud)
小智 7
检查数据库表中的“ id”列是否为大写的“ ID”。将其更改为小写允许我的save()方法起作用。
由于 Laravel 5.5 laravel 改变了一些验证机制,我想你需要尝试这种方式。
public function store(Request $request, $id)
{
$post = Post::findOrFail($id);
$validatedData = [];
// Request validation
if ($post->type == 1) {
// Post type has title
$validatedData = $request->validate([
'title' => 'required|min:15',
'body' => 'required|min:19',
]);
} else {
$validatedData = $request->validate([
'body' => 'required|min:19',
]);
}
$post->update($validatedData);
return redirect('/');
}
Run Code Online (Sandbox Code Playgroud)