Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel eloquent update record without loading from database

I'm quite new to laravel and I'm trying to update a record from form's input. However I see that to update the record, first you need to fetch the record from database. Isn't is possible to something like to update a record (primary key is set):

$post = new Post();
$post->id = 3; //already exists in database.
$post->title = "Updated title";
$post->save();
like image 790
Dester Dezzods Avatar asked Apr 12 '15 20:04

Dester Dezzods


5 Answers

Post::where('id',3)->update(['title'=>'Updated title']);
like image 172
KaJasB Avatar answered Oct 18 '22 05:10

KaJasB


You can simply use Query Builder rather than Eloquent, this code directly update your data in the database :) This is a sample:

DB::table('post')
            ->where('id', 3)
            ->update(['title' => "Updated Title"]);

You can check the documentation here for more information: http://laravel.com/docs/5.0/queries#updates

like image 40
Bagaskara Wisnu Gunawan Avatar answered Oct 18 '22 06:10

Bagaskara Wisnu Gunawan


The common way is to load the row to update:

$post = Post::find($id);

In your case

$post = Post::find(3);
$post->title = "Updated title";
$post->save();

But in one step (just update) you can do this:

$affectedRows = Post::where("id", 3)->update(["title" => "Updated title"]);
like image 20
maztch Avatar answered Oct 18 '22 07:10

maztch


Use property exists:

$post = new Post();
$post->exists = true;
$post->id = 3; //already exists in database.
$post->title = "Updated title";
$post->save();

Here is the API documentation: http://laravel.com/api/5.0/Illuminate/Database/Eloquent/Model.html

like image 23
harrrrrrry Avatar answered Oct 18 '22 07:10

harrrrrrry


You can also use firstOrCreate OR firstOrNew

// Retrieve the Post by the attributes, or create it if it doesn't exist...
$post = Post::firstOrCreate(['id' => 3]);
// OR
// Retrieve the Post by the attributes, or instantiate a new instance...
$post = Post::firstOrNew(['id' => 3]); 

// update record
$post->title = "Updated title";
$post->save();

Hope it will help you :)

like image 28
Ravi Avatar answered Oct 18 '22 05:10

Ravi