Yatin Khullar
Yatin Khullar

Reputation: 1590

Cannot update in laravel

Hello I am new in Laravel and this is my first app

I am getting error: Call to undefined method stdClass::save()

This is my modal code named Song.php:

<?php namespace App;

use Illuminate\Database\Eloquent\Model as Eloquent;

class Song extends Eloquent{
    protected $table = 'songs';
    protected $fillable = ['title'];
}

And this is my controller code named PageController.php:

<?php

namespace App\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Http\Request;
use App\Song;
use DB;

abstract class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}

class PageController extends Controller{
public function update($slug, Request $request){
        //dd(\Request::input());
        $song_name = DB::table('songs')->whereSlug($slug)->first(); /***songs is a table name ****/
        $song_name->title = $request->get('title');
        $song_name->save();
        return redirect('slug'.$song_name->slug.'/edit');
        //return "Update page";
    }
}

But I am getting error Call to undefined method stdClass::save() on my pageController my datatable name is songs

Upvotes: 1

Views: 425

Answers (1)

jedrzej.kurylo
jedrzej.kurylo

Reputation: 40909

You are using DB facade to get songs from the database - that's why you're getting results as object of stdClass. Use Eloquent model's methods instead and you'll get objects of Song class.

Replace

$song_name = DB::table('songs')->whereSlug($slug)->first();

with

$song_name = Song::whereSlug($slug)->first();

Upvotes: 3

Related Questions