it-swarm.com.de

Laravel Eloquent $ model-> save () wird nicht gespeichert, aber kein Fehler

Bei der Aktualisierung meines Post-Modells führe ich Folgendes aus:

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

$post->save();

Dies führt dazu, dass nicht meinen Beitrag aktualisiert. Aber es sollte laut die Laravel-Dokumente zur Aktualisierung eloquenter Modelle . Warum wird mein Modell nicht aktualisiert?

Post Modell:

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

   ....
}

Post controller:

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

Bonus-Info

Wenn Sie dd($post->save()) ausführen, wird true zurückgegeben.

Laufen

$post->save();

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

zeigt mir, dass $fetchedPost derselbe Beitrag ist wie vor ohne den aktualisierten Daten.

10
Jacob

Überprüfen Sie Ihre Datenbanktabelle, ob die Spalte "ID" in "ID" in Großbuchstaben angegeben ist. Wenn ich es in Kleinbuchstaben änderte, konnte meine save () - Methode funktionieren.

Da Laravel 5.5 einige Validierungsmechanismen geändert hat, müssen Sie dies auf jeden Fall versuchen.

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

Ich hatte das gleiche und stellte sich heraus, weil ich die Ausgabespalten ohne den Primärschlüssel filterte.

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

Fest mit

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

Ergibt bei der Überprüfung einen vollkommenen Sinn. Ohne den verfügbaren Primärschlüssel ist der Befehl update auf Null.

2
Mark Walker

Ich hatte das gleiche Problem und die Art und Weise zu ändern, wie ich das Modell abrief, löste es! 

Hat nicht gespart, obwohl angeblich alles so funktioniert hat, wie Sie es erwähnt haben:

$user = User::find($id)->first(); 

Das funktioniert:

$user = User::find($id);
1
Bardiya B.

Wenn Sie meiner Erfahrung nach ein Eloquent-Modell aus der Datenbank auswählen und die Spalte primary_key Nicht Teil der abgerufenen Spalten ist, gibt $model->save() zwar true zurück, es wird jedoch nichts in der Datenbank beibehalten.

Anstatt also \App\Users::where(...)->first(['email']) auszuführen, führen Sie \App\Users::where(...)->first(['id','email']) aus, wobei id das in der Zieltabelle definierte primary_key Ist.

Wenn die (manchmal Mikrooptimierung), die durch das Abrufen von nur wenigen Spalten erzielt wird, für Sie nicht wirklich von Bedeutung ist, können Sie einfach alle Spalten mit \App\Users::where(...)->first() abrufen. In diesem Fall müssen Sie sich nicht um die kümmern Name der Spalte primary_key, da alle Spalten abgerufen werden.

0

Versuche dies 

public function store($id,Request $request)
{
    $post = Post::findOrFail($id);

    // Request validation
    if ($post->type == 1) {
        // Post type has title
         $request->validate([
            'title' => 'required|min:15',
            'body' => 'required|min:19',
        ]);
        $post->update([
              'title' => request('title');
              'body' => request('body');
             ]);
    } else {
         $request->validate([
            'body' => 'required|min:19',
        ]);

        $post->update([
              'body' => request('body');
             ]);
    }

    return redirect('/');
}
0
MalemScha