1
votes

Rechercher dans le modèle associé à Laravel

J'ai une table de publication comme celle-ci:

Post::where(['title'=>$request->title])->with('category')->paginate(10);

et c'est le tableau des catégories

  public function category()
    {
        return $this->belongsTo(Category::class, 'category_id', 'id');
    }

c'est la relation entre ces deux qui est à l'intérieur du modèle post:

id | category_title

Je veux obtenir l'enregistrement de la table de publication où category_title ou post_title correspond au mot-clé saisi par l'utilisateur.

Je récupère des données comme:

id | post_title | category_id

mais ici, il ne récupère que le titre du message, mais je veux aussi qu'il le recherche dans le titre de la catégorie.

Toute aide est grandement appréciée.


0 commentaires

4 Réponses :


0
votes
Post::->where('title', 'like', '%'.$request->title.'%')->with(['category' => function($query) use ($request){
    $query->where('category_title', 'like', '%'.$request->title.'%');
}])->paginate(10);

1 commentaires

Bien que ce code puisse résoudre le problème, une bonne réponse devrait expliquer ce que fait le code et comment il aide.



0
votes

Essaye ça:-

$keyword = $request->input('title');

Post::with('category')
     ->where('title', 'like','%'.$keyword.'%')
     ->orWhere('category.category_title','like','%'.$keyword.'%')
     ->paginate(10);


0 commentaires

0
votes

vous devez utiliser orWhereHas :

 Post::where(['title' => $request->title])->
        orWhereHas('category',function ($query)use($request){
            $query->where('category_title',$request->title);
        })->with('category')-> paginate(10);


2 commentaires

Bien que ce code puisse résoudre le problème, une bonne réponse devrait expliquer ce que fait le code et comment il aide.


une réponse sans `` quoi et comment '' est une réponse incomplète, mais ce n'est pas une mauvaise réponse



1
votes
Post::where('title', 'like', '%'.$request->title.'%')->with(['category' => function($query) use ($request){
        $query->where('category_title', 'like', '%'.$request->title.'%');
    }])->paginate(10);
In the above code snippet
We are fetching the title which matches with the request
with(['category' => function($query) use ($request): laravel matches the result into relationship using closure function which accepts one parameter $request
and again we are filtering the relationship with this parameter $request->title which is coming through Request $request
You can use the code above or you can make a scope for reusability.

0 commentaires