Laravel Eloquent $ model-> save()不保存但没有错误

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模型.为什么我的模型没有更新?

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没有更新数据的情况下向我显示与之前相同的帖子.

Mar*_*ker 9

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

$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。


Ali*_*deh 7

我遇到了同样的问题,改变获取模型的方式解决了它!

尽管一切都应该像您提到的那样工作,但没有保存:

$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()方法起作用。

  • 您不必更改它。您可以通过在模型中添加`protected $ primaryKey ='Id';`来定义模型中的主键名称。如果主键是“ Id”而不是“ id” (5认同)

Vam*_*ire 6

您必须确保您正在调用的实例save()具有该属性id


Moe*_*sra 4

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