Como resuelvo el “Call to undefined method IlluminateDatabaseQuery”

publicado por: Anonymous

En mi blog presento todos los articulos en el inicio con un substr de lo que dice el post, luego tengo un boton de leer mas para ver el articulo en otra vista y ahí es donde viene mi error. Me muestra el siguiente error “Call to undefined method IlluminateDatabaseQueryBuilder::findBySlug()

Mi ruta es la siguiente

Route::get('article/{slug}',[
    'uses' => '[email protected]',
    'as'   => 'article'
]);

Mi [email protected]

<?php

namespace BlogHttpControllers;

use IlluminateHttpRequest;

use BlogHttpRequests;
use BlogArticulo;
use BlogUser;
use BlogCategoria;
use BlogHttpControllersController;

class FrontController extends Controller{
    public function article($slug){

        $articul = Articulo::findBySlug($slug);
        return view('articulo',compact('articul'));
    }

}

Mi view articulo

<div class="row">
        <div class="col-md-8">
            <h1>Ultimas Noticias</h1>
                <article>
                    <h2>{{$articul->titulo}}</h2>
                    <div class="row">
                        <div class="col-md-6">
                            <span class="glyphicon glyphicon-folder-open" aria-hidden="true"></span> {{ $articul->categoria->categoria }}
                            <span class="glyphicon glyphicon-user" aria-hidden="true"></span> {{ $articul->user->name }}
                        </div><!--fin del col-md-6-->

                        <div class="col-md-6">
                            <span class="glyphicon glyphicon-calendar" aria-hidden="true"></span> {{ $articul->created_at }}
                        </div><!--fin del col-md-6-->

                    </div><!--fin del row dentro de col-md-8-->
                    <br>
                    <img src="img/{{$articul->path }}" alt="" class="img-responsive">
                    <br>
                    <p>{{ $articul->contenido }}</p>
                </article>
        </div> <!--fin del col-md-8-->

Cuando muestro mis articulos a través del index si se ve bien, pero cuando intento ver un articulo en especial me suelta ese error.

Modelo Articulo

<?php

namespace Blog;

use IlluminateDatabaseEloquentModel;
use CviebrockEloquentSluggableSluggable;
use CarbonCarbon;
class Articulo extends Model{

    use Sluggable;

    /**
    * Return the sluggable configuration array for this model.
     *
     * @return array
     */
    public function sluggable(){
        return [
            'slug' => [
                'source' => 'titulo'
            ]
        ];
    }
     protected $table = 'articulos';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = ['titulo', 'contenido','slug','path','etiqueta','user_id','categoria_id'];

    public function setPathAttribute($path){
        if(! empty($path)){
            $name = Carbon::now()->second.$path->getClientOriginalName();
            $this->attributes['path'] = $name;
            Storage::disk('local')->put($name, File::get($path));
        }
    }



    public function categoria(){
        return $this->belongsTo('BlogCategoria');
    }

    public function user(){
        return $this->belongsTo('BlogUser');
    }

    public function scopeTitulo($query, $titulo){//Funcion para hacer una busqueda 
        if(trim($titulo) != ''){ //Funcion trim para eliminar los espacios
            $query->where(DB::raw("titulo"),"LIKE","%$titulo%");
        }


    }
}

solución

En las versiones más recientes de Sluggable estos métodos forman parte de los helpers (de Sluggable) y tienes que incluirlos por aparte en tu modelo:

<?php

namespace Blog;

use IlluminateDatabaseEloquentModel;
use CviebrockEloquentSluggableSluggable;
use CviebrockEloquentSluggableSluggableScopeHelpers;
use CarbonCarbon;

class Articulo extends Model{

    use Sluggable, SluggableScopeHelpers;

    // ...

}
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *