Je travaille avec le framework Laravel. Je souhaite obtenir les données pour la promotion avec une certaine catégorie.
<b>Table</b><br>
product<br>
------<br>
id<br>
name<br>
price<br>
promotion<br>
----------<br>
id<br>
product_id<br>
discount<br>
category<br>
---------<br>
id<br>
name<br>
product_category<br>
----------------<br>
product_id<br>
category_id<br>
$promotions = Promotion::with('product')->with('category')
->whereIn('category_id', ['1','2'])
->paginate(9);
Promotion model - connect relation for product and category
// relationship with product
public function product()
{
return $this->belongsTo('App\Model\Product');
}
//relationship with category
public function category()
{
return $this->belongsToMany('App\Model\Category', 'products_categories', 'product_id', 'category_id');
}
Erreur:
SQLSTATE [42S22]: Colonne introuvable: 1054 Colonne inconnue 'category.id' dans 'clause where' (SQL: sélectionnez count (*) comme agrégat de
promotionsoùcatégorie .iddans (1, 2))
3 Réponses :
Essayez ceci:
$promotions = Promotion::with('product.product_category')
->whereIn('category_id', ['1','2'])
->paginate(9)
En supposant que vous deviez créer les relations correctes dans les modèles .
Edit:
Dans le modèle Promotion :
//relationship with category
public function product_category()
{
return $this->belongsToMany('App\Model\ProductCategory', 'category_id', 'id');
}
et le modèle de produit :
//relationship with category
public function product_category()
{
return $this->belongsTo('App\Model\ProductCategory', 'product_id', 'id');
}
Dans le modèle de catégorie :
// relationship with product
public function product()
{
return $this->belongsTo('App\Model\Product');
}
l'erreur est category_id introuvable. J'avais ajouté un modèle de relation à la question
j'avais édité la question pour ajouter une relation entre le modèle
Vous devez modifier cette relation: Catégorie de la fonction publique () {Retour $ Ceci-> ApportTomanany ('App \ Modèle \ Catégorie', 'Produits_Catégories', 'Product_ID', "Product_ID"); }
Hé, je comprends votre question et j'ai trouvé une solution. vérifiez ma réponse modifiée .
Que diriez-vous de:
$promotions = Promotion::whereHas('product.category' => function($q){
return $->whereIn('category_id', ['1','2']);
})
->paginate(9);
Si vous souhaitez obtenir toutes les promotions dont la catégorie a un identifiant en 1,2, vous pouvez faire:
$promotions = Promotion::with([ 'product.category' => function($q){
return $->whereIn('category_id', ['1','2']);
}])
->paginate(9);
Vous obtiendrez simplement des promotions et non des catégories. si c'est ce que vous cherchiez.
Vous pouvez simplement utiliser ceci:
$promotions = Promotion::whereHas(
'product.category',
function ($q) {
$q->whereIn('category_id', ['1', '2']);
})
->paginate(9);