Laravel Eloquent $model->save() 未保存但未出错

2022-08-30 12:42:58

更新模型时,我运行:Post

$post->title = request('title');
$post->body = request('body');

$post->save();

不会更新我的帖子。但根据Laravel关于更新Eloquent模型的文档,它应该这样做。为什么我的模型没有更新?

Post型:

class Post extends Model
{
    protected $fillable = [
        'type',
        'title',
        'body',
        'user_id',
    ];

   ....
}

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('/');
}

奖金信息

运行返回 。dd($post->save())true

运行

$post->save();

$fetchedPost = Post::find($post->id);
dd($fetchedPost);

显示我与以前的帖子相同,没有更新的数据。$fetchedPost


答案 1

检查数据库表,如果“id”列是大写的“ID”。将其更改为小写允许我的 save() 方法工作。


答案 2

我有同样的情况,结果是因为我在没有主键的情况下过滤输出列。

$rows = MyModel::where('...')->select('col2', 'col3')->get();
foreach($rows as $row){
    $rows->viewed = 1;
    $rows->save();
}

固定

$rows = MyModel::where('...')->select('primary_key', 'col2', 'col3')->get();

在审查时非常有意义,如果没有可用的主键,更新命令将位于 Null 上。


推荐