2017-06-18 5 views
0

Mein Problem ist einfach. Ich habe zwei TabellenZeilen zählen für die Spalte in Mysql

transaction_bodies 
------------------ 
body_id 
full_name 

und das andere ist

transaction_accounts 
-------------------- 
account_id 
body_id 
account_name 

Relation one to many ist. Ein Körper kann mehrere Konten haben. Ich versuche, eine Abfrage zu erstellen, die die Konten zählt, die Körper haben.

ich versuchte, diesen

SELECT * 
    FROM 
    (
     SELECT count(*) as trans, tb.full_name 
     FROM transaction_accounts ta 
     LEFT JOIN transaction_bodies tb 
     ON tb.body_id = ta.body_id 
    ) as row; 

Aber dies das richtige Ergebnis nicht geben. Kann mir jemand dabei helfen? Und wenn kann, wie das Schreiben von Unterabfragen in Laravel bereitstellen, die eine sehr geschätzt werden würde.

+1

Sie haben markiert diese mit Laravel, sind Sie Eloquent (Laravel Modelle) mit? –

Antwort

1

Versuchen Sie folgendes:

$result = DB::table('transaction_bodies') 
     ->leftJoin('transaction_accounts as 
           ta','transaction_bodies.body_id','ta.body_id') 
      ->select(DB::raw('count(ta.account_id) AS trans'),'transaction_bodies.full_name') 
      ->groupBy('transaction_bodies.body_id') 

     ->get(); 
1

Sie können es mit LEFT JOIN, zB:

SELECT tb.body_id, COUNT(ta.*) 
FROM transaction_bodies LEFT JOIN transaction_accounts ta 
ON tb.body_id = ta.body_id 
GROUP BY tb.body_id; 
1

Mit einem einfachen LEFT JOIN können Sie es wie

SELECT tb.full_name, COUNT(account_id) as accounts 
FROM transaction_bodies tb LEFT JOIN transaction_accounts ta 
ON tb.body_id = ta.body_id 
GROUP BY tb.body_id; 

In Laravel erreichen Sie es wie mit dem Modell tun

$accounts = Transaction_body::leftJoin('transaction_accounts as ta','transaction_bodies.body_id','ta.body_id')->groupBy('transaction_bodies.body_id')->get(); 

ohne Modell

$accounts = DB::table('transaction_bodies')->leftJoin('transaction_accounts as ta','transaction_bodies.body_id','ta.body_id')->groupBy('transaction_bodies.body_id')->get(); 
1
  /** 
      * Class Body 
      */ 
      class Body extends Model 
      { 
       /** 
       * The database table used by the model. 
       * 
       * @var string 
       */ 
       protected $table = 'transaction_bodies'; 

       /** 
       * Get the accounts for the Transaction Body. 
       */ 
       public function accounts() 
       { 
        return $this->hasMany(Account::class); 
       } 
      } 

      /** 
      * Class Account 
      */ 
      class Account extends Model 
      { 
       /** 
       * The database table used by the model. 
       * 
       * @var string 
       */ 
       protected $table = 'transaction_accounts'; 

       /** 
       * Get the body that owns the account. 
       */ 
       public function body() 
       { 
        return $this->belongsTo(Body::class); 
       } 
      } 

      //usage 
      $accounts = Body::find(1)->accounts; 

https://laravel.com/docs/5.4/eloquent-relationships#one-to-many

Verwandte Themen