I have a main page composed of articles that show the last articles that have been received, and list (links)
of all the categories and the number of items that each category has.
What I want to do is filtrar
, that is to say that when clicking on a link
go to the method of a controller that refers to a scope
and using the same variables of the same controller method to show the main page, filter the content, that is to say that each link
that you click leaves the articles for that category.
The idea is to reuse the code as well as the driver variables
I've been thinking about it for a while, I'm sure it's silly but I do not see anything anymore
This is the error
ErrorException in c91ad600cf0c607229837e7ba61e74098bd6634d.php line 20: Trying to get property of non-object (View: C: \ xampp \ htdocs \ HTDOCS_PHP \ Laravel_CodigoFacilito \ resources \ views \ admin \ partials \ asidefront.blade.php) (View: C: \ xampp \ htdocs \ HTDOCS_PHP \ Laravel_CodigoFacilito \ resources \ views \ admin \ partials \ asidefront.blade.php)
Main Controller
public function index()
{
$tags = \App\modelos\tag::orderBy('id','DESC')->get();
$categorias = \App\modelos\categoria::orderBy('id','DESC')->get();
$articulos = \App\modelos\articulo::orderBy('id','DESC')->paginate(4);
return View('front.index',compact('articulos','categorias','tags'));
}
public function buscaCategoria($nombrecat) //FUNCION PARA FILTRAR
{
$tags = \App\modelos\tag::orderBy('id','DESC')->get();
$categorias = \App\modelos\categoria::BuscaCategoria($nombrecat)->first();
$articulos = $categorias->articulos()->paginate(4);
return View('front.index',compact('articulos','categorias','tags'));
}
Main View
@section('contenido')
<h3 class="title-front left">Ultimos productos</h3>
<hr>
<div class="row">
<div class="col-md-8">
<div class="row">
@foreach($articulos as $articulo)
<div class="col-md-6">
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title text-uppercase">{{$articulo->title}}</h3>
</div>
<div class="panel-body" id="imagenesArticulos">
@foreach($articulo->imagenes as $imagenes)
<img src="{{url('/ima/articulos/'.$imagenes->nombre)}}">
@endforeach()
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Non totam, assumenda reprehenderit itaque esse ea dignissimos dolorem, at nam porro repudiandae placeat et commodi reiciendis tempora dolore est aliquid, ut facere earum molestiae hic quaerat sunt magnam. Animi nobis sequi ea aliquam saepe, minima culpa nemo. Veritatis dolor reprehenderit assumenda, nihil minima commodi tenetur aliquam, obcaecati, quisquam aspernatur, laborum dolore tempore error impedit ipsa cupiditate voluptate porro cumque. Omnis adipisci, velit labore accusamus temporibus, nam quidem consequatur beatae ab pariatur porro, quisquam, culpa asperiores nisi laborum in illo voluptates libero quo reprehenderit amet corporis. Accusantium optio autem consequatur excepturi illo dolores culpa aliquid eligendi aspernatur, temporibus, sapiente amet aut possimus tempora obcaecati quasi suscipit dolore maiores hic, sit, ipsa? Corporis vitae quia quam, ipsum repellendus quo, voluptates. A, sed pariatur consectetur eveniet, natus nobis recusandae voluptatum, beatae, numquam alias distinctio vitae id incidunt facere quos illo odio eligendi similique quasi.</p>
<hr>
<h3 class="text-center">{{$articulo->title}}</h3>
<a>{{$articulo->categoria->nombre}}</a>
<div class="pull-right">
<p>{{$articulo->updated_at->diffForHumans()}}</p>
</div>
</div>
</div>
</div>
@endforeach
</div>
</div>
@include('admin.partials.asidefront')
</div>
<div class="row">
<div class="col-md-12">
{{$articulos->appends(Request::all())->render()}}
</div>
</div>
@endsection
Asidefront (Include in the Main View) (Here is the error)
<div class="col-md-4">
<div class="row">
<div class="col-md-12">
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title">Categorias</h3>
</div>
<div class="panel-body">
<ul class="list-group">
@foreach($categorias as $categoria)
<li class="list-group-item">
<span class="badge">{{count($categoria->articulos)}}</span>
<a href="{{url('buscaCat/'.$categoria->nombre)}}">{{$categoria->nombre}}</a>
</li>
@endforeach
</ul>
</div>
</div>
</div>
<div class="col-md-12">
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title">TAGS</h3>
</div>
<div class="panel-body" id="etiquetas" >
@foreach($tags as $tag)
<a href="{{url('buscaTag/'.$tag->tags)}}">
<span class="label label-info" >{{$tag->tags}}</span>
</a>
@endforeach
</div>
</div>
</div>
</div>
</div>
The main page shows it to me without problems, this happens to me when referencing the buscaCategoria
method.
Any ideas? Thanks.
************************** Added First Edition ************ * Model Category
class categoria extends Model
{
protected $table = 'categorias';
protected $fillable = array('nombre');
public function articulos()
{
return $this->hasMany('App\modelos\articulo');
}
public function scopeBuscaCategoria($query,$nombreCat)
{
return $query->where('nombre', 'LIKE','%'.$nombreCat.'%');
}
}
DD of Home Categories
DD Search Categories Categories
Line 20 in theory is the count of these lines in the file aside
@foreach($categorias as $categoria)
<li class="list-group-item">
<span class="badge">{{count($categoria->articulos)}}</span>
<a href="{{url('buscaCat/'.$categoria->nombre)}}">{{$categoria->nombre}}</a>
</li>
@endforeach
************************ Added Second Edition ******************* *********
Model Articles
<?php
class articulo extends Model
{
protected $table = 'articulos';
protected $fillable = array('title','content','categoria_id','user_id');
public function categoria()
{
return $this->belongsTo('App\modelos\categoria','categoria_id', 'id');
}
public function imagenes()
{
return $this->hasMany('App\modelos\imagen');
}
public function tags()
{
return $this->belongsToMany('App\modelos\tag');
}
public function usuario()
{
return $this->belongsTo('App\User','user_id');
}
public function scopebuscadordeArticulos($query,$buscador)
{
return $query->where('title','like','%'.$buscador.'%');
}
}
*********************** THIRD EDITION ****** SOLUTION ********* ****** public function searchCategory ($ nombrecat) // FUNCTION TO FILTER {
$tags = \App\modelos\tag::orderBy('id','DESC')->get();
$categorias = \App\modelos\categoria::orderBy('id','DESC')->get();
$catporArticulo = \App\modelos\categoria::BuscaCategoria($nombrecat)->first();
$articulos = $catporArticulo->articulos()->paginate(4);
return View('front.index',compact('articulos','categorias','tags'));
}