J'ai 3 tables utilisateurs, articles et metas. J'avais défini morphTo() et morphToMany() en fonction du document laravel 5.3 et je peux extraire toute propriété particulière de l'utilisateur ou de l'article défini dans la table des métas, comme prénom, nom ou coordonnée.Recherche des données de laravel meta table de type metable
J'ai maintenant des difficultés à écrire le bon modèle pour rechercher ces propriétés, par exemple une recherche du prénom ou du nom de famille de l'utilisateur, ou les deux.
<u>User table</u>
id. username. password
1. Test. Testpass
<u>article</>
id. Title. Slug
1. My article title. my-article-title
tableau Metas
Id. key. value. metable_id metable_type
1 firstname Ade 1 App\User
2. content. Sample article 1. App\Article
3. lastname. Keon. 1. App\User
Meta.php Extrait
public function metable() {
return $this->morphTo();
}
User.php Extrait
public function meta() {
return $this->morphToMany('App\User', 'metable');
}
public function getName() {
$user = User::find($this->id);
$metadata = $user->meta()->whereIn('key', ['firstname', 'lastname']) ;
dd($metadata);
}
Article.php Extrait
public function meta() {
return $this->morphToMany('App\User', 'metable');
}
La fonction getName a fonctionné comme prévu, mais je ne peux pas comprendre comment faire une recherche des métadonnées utilisateur contrairement à la table php/mysql classique rejoint
ne sais pas comment que toute relation polymorphes dans Laravel est nouveau pour moi, mais j'ai trouvé et utilisé quelque chose comme ceux-ci:
public function getSearch() {
return User::with(array('metas' => function($query) {
$query->where('value', $query);
}));
}
ou
public function getSearch() {
return User::with('metas')
->whereHas('metas', function($query) {
$query->where('value', '=', $query);
});
}
Je ne peux pas voir ou raison comment Joi n les tables Laravel
ici est ma nouvelle requête de recherche
public function getResults(Request $request) {
$keyword = $request->input('query');
$filterOne = $request->input('minAge');
$filterTwo = $request->input('maxAge');
$query = User::with(['meta' => function ($q) {
$q->where('value', 'like', $keyword)
->orWhere(function ($q) {
$q->whereBetween('value', [$filterOne,$filtertwo]);
});
}])->get();
dd($query);
}
Veuillez décrire ce que vous avez essayé et ce qui ne fonctionne pas. – TheFallen
Montrez le schéma de votre base de données et vos relations. –
@TheFallen J'avais mis à jour d question comme conseillé – adeguk