2017-10-12 5 views
0

je le dépôt suivant Products et chaque produit peut avoir beaucoup Categories et beaucoup BiddersLaravel Référentiels whereHas - plusieurs

Ce que je suis en train de réaliser est la suivante (sans dépôt)

$products = Products::whereHas('categories', function ($category) { 


})->whereHas('bidders', function ($bidder) { 

})->get(); 

Cette fonctionne bien, cependant, j'essaie de faire en sorte que les dépôts sont en place et vous pouvez toujours faire la requête whereHas, donc dans mon référentiel j'ai créé une méthode:

public function whereHas($attribute, \Closure $closure = null) 
{ 
    return $this->model->whereHas($attribute, $closure); 
} 

Cela fonctionne bien, mais seulement si je me sers un d'entre eux dans ma requête principale, alors que si j'utilise plusieurs:

$products = $this->products->whereHas('categories', function ($category) { 
    $category->where('id', '=', 1); 
})->whereHas('bidders', function($bidders) { 

})->get(); 

Je reçois l'erreur suivante:

Unknown column 'has_relation'

Column not found: 1054 Unknown column 'has_relation' in 'where clause' (SQL: select * from products where exists (select * from categories inner join products_categories on categories . id = products_categories . categories_id where products . id = products_categories . products_id and id = 1) and (has_relation = sections))

Le problème que je vois, c'est qu'il renvoie une collection d'éléments sur le premier whereHas ce qui signifie qu'il ne peut pas calculer le second. Des idées sur où je vais mal?

Répondre

0

Vous pouvez passer une fermeture avec de multiples relations à whereHas

$products = $this->products->whereHas(['categories', function 
     ($category) { 
    $category->where('id', '=', 1); 
},'bidders' => function($bidders) { 

}])->get(); 

Il fonctionnera comme prévu.