Laravel 6

Affichage d'images par catégorie

Avatar de Pat2010
Pat2010

j'ai une table des publication et une table des images liée à la table des publication.Je veux afficher les images selon la catégorie des publications.Mais mon code me ramène toutes les images.

vue:

                         @foreach($image1 as $img) 
                            <div class="col-xl-6 col-lg-6 col-md-6">
                                <div class="single_explorer">
                                    
                                    <div class="thumb">
                                        <img src="/images/{{ $img->filename }} " alt="">
                                    </div>
                                    
                                    <div class="explorer_bottom d-flex">
                                        <div class="icon">
                                            <i class="flaticon-beach"></i>
                                        </div>
                                        
                                        <div class="explorer_info">
                                            <h3><a href="single_listings.html">{{$img->post->Titre}}</a></h3>
                                            <p>{{$img->post->Description}}</p>
                                            <ul>
                                                <li> <i class="fa fa-phone"></i>{{$img->post->phone}}</li>
                                                <li><i>${{$img->post->Price}}</i></li>
                                            </ul>
                                        </div>
                                    </div>
                                </div>
                            </div>
                           @endforeach
                           
                           

controlleur :


 public function index1() 
    {
        $category = Category::paginate(10);
        $data1 = Post::where('category_id', 1)->orderBy('created_at', 'desc')->get();
        $image1 = Upload::orderBy('created_at','desc')->get();
        return view('admin.category.communaute', compact('category','data1','image1'));
    }
Avatar de bestmomo
bestmomo

Salut,

Si j'en crois cette ligne :

$image1 = Upload::orderBy('created_at','desc')->get();

Tu ne filtres pas les images...

Avatar de Pat2010
Pat2010

Dans ma table image qui est upload je n'est que deux colonnes qui sont "filename" et "post_id". Ma difficulté est que je dois passer par la clé étrangère "post_id" pour avoir toutes les informations sur la table "post" , "categorie" est une colonne de la table "post"

Avatar de bestmomo
bestmomo

Tu as mis en place des relations ?

Avatar de Pat2010
Pat2010

oui oui j'ai mis en place des relations voici le model de la table image :

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Upload extends Model
{
    protected $fillable = ['post_id', 'filename'];

    public function post()
    {
        return $this->belongsTo('App\Post');
    }
}
Avatar de Pat2010
Pat2010

voici le controlleur :

public function index1() 
{ 
    $category = Category::paginate(10); 
    $data1 = Post::where('category_id', 1)->orderBy('created_at', 'desc')->get(); 
    $image1 = Upload::orderBy('created_at','desc')->get();
    return view('admin.category.communaute', compact('category','data1','image1'));
}
Avatar de bestmomo
bestmomo

Donc tu veux les images des posts qui sont dans une certaine catégorie ?

Edit : je crois que j'ai compris, si les relations sont bonnes :

$image1 = Category::findOrFail(1)->posts()->uploads()->with('posts')->get();
Avatar de Pat2010
Pat2010

post:

class Post extends Model
{
    use SoftDeletes;

    protected $fillable = ['Titre','category_id','Price','Description','Etat','Adresse','Phone','Ville','slug','user_id','limit','active'];

    public function category(){
        return $this->belongsTo('App\Category');
    }

    public function tags(){
        return $this->belongsToMany('App\Tags');
    }

    public function user(){
        return $this->belongsTo('\App\User');
    }

    public function photos()
    {
        return $this->hasMany('App\Upload');
    }
    
}

Avatar de Pat2010
Pat2010

category:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    protected $fillable = ['name', 'slug'];
    protected $table = 'category';

}

Avatar de Pat2010
Pat2010

Voici les colonne de category :

'name', 'slug'

les colonnes de post:

'Titre','category_id','Price','Description','Etat','Adresse','Phone','Ville','slug','user_id','limit','active'

les colonnes de upload:

'post_id', 'filename'
Avatar de Pat2010
Pat2010

je veux afficher l'image de la publication qui est dans upload en fonction de sa categorie

Avatar de bestmomo
bestmomo

Le code que je t'ai proposé ne fonctionne pas ?

Avatar de Pat2010
Pat2010

oui le code ne fonctionne pas

Avatar de bestmomo
bestmomo

Dans mon code j'ai utilisé upload() alors que tu as appelé la fonction photos().

Vous ne pouvez pas répondre à ce sujet.