2017-10-12 3 views
0

Quelle est la méthode correcte pour obtenir le nombre de lignes dont la colonne spécifiée est une clé étrangère d'une autre table. Voici ce que je veux dire:Obtenir le nombre de lignes avec une jointure dans Laravel

J'ai 2 tables providers et products. La table de fournisseurs a la clé primaire provider_id et la table products a une référence de clé étrangère à provider_id via une colonne nommée la même, provider_id. Mon intention est de récupérer les détails de chaque fournisseur, y compris tous leurs produits, c'est-à-dire un total de toutes les instances où provider_id dans la table products correspondait providers_id dans le tableau providers.

Voici mon code:

$data = DB::table('providers') 
      ->join('products', 'products.provider_id', '=', 'providers.provider_id') 
      ->select(
       'providers.provider_id AS id', 
       'providers.provider_name AS name', 
       DB::raw("count(products->where('products.provider_id','=','providers.provider_id')) AS total_products"), 
       'providers.claims AS claims', 
       'providers.settlements AS settlements') 
     ->groupBy('provider') 
     ->get(); 

Cela ne semble pas fonctionner comme je reçois l'erreur suivante:

Undefined property: Illuminate\Database\MySqlConnection::$id (View: /var/www/test/app/resources/views/agent/serviceproviders/index.blade.php) 

Qu'est-ce que je fais mal?

+0

Merci pour la correction @Oluwafemi Sule. –

+0

probablement un conflit avec products.id et pourquoi donnez-vous même des alias comme vous ne les utilisez pas n'importe où? –

+0

@AnarBayramov il n'y a pas de produits.id. L'aspect commun entre les deux tables est la clé primaire dans la table des providers qui est providers.provider_id (oui, j'ai nommé la colonne provider_id qui incrémente aussi automatiquement au lieu de l'id normal que les gens utilisent souvent). J'ai trouvé le problème et l'ai trié, je suis sur le point d'afficher le bon code. –

Répondre

0

Le problème était de savoir comment je comptais les lignes et comment je groupais les données pour un comptage correct. Je me sens si bête, c'était trop facile. Ci-dessous le code correct:

$data = DB::table('providers') 
      ->join('products', 'products.provider_id', '=', 'providers.provider_id') 
      ->select(
       'providers.provider_id AS id', 
       'providers.provider_name AS name', 
       DB::raw("count(products.provider_id) AS total_products")) 
     ->groupBy('providers.provider_id') 
     ->get(); 
+0

[Veuillez accepter votre réponse] (https://stackoverflow.com/help/self-answer), vous aiderez les futurs visiteurs à répondre à la même question, et vous permettrez à tous ceux qui cherchent à savoir que vous avez déjà résolu le problème. problème. –