2017-02-26 12 views
0

私は1対多の関係を持つモデルクラスを持っています。配列としてのrealtionshipを持つレコードを取得する

class Budget extends Phalcon\Mvc\Model 
{ 
    public function initialize() 
    { 
     $this->setSource('budgets'); 

     $this->hasMany('id', BudgetItem::class, 'budget_id'); 
    } 
} 

class BudgetItem extends Phalcon\Mvc\Model 
{ 
    public function initialize() 
    { 
     $this->setSource('budget_items'); 

     $this->belongsTo('budget_id', Budget::class, 'id'); 
    } 
} 

したがって、1つの予算レコードにはbudget_itemsが多数あります。

$query = $modelsManager->createBuilder() 
    ->addFrom(Budget::class, 'b') 
    ->leftJoin(BudgetItem::class, 'b.id = bi.budget_id', 'bi') 
    ->columns('b.*, bi.*') 
    ->where('b.id = :id:', ['id' => 1]) 
    ->getQuery(); 

$result = $query->execute(); 

しかし、結果は私のためにかなり奇妙に見える:私は、クエリを構築するように、すべての関連する項目とそのIDで予算を取得したいです。

{ 
    b: { 
     id: "1" 
     bi: [ 
      { 
       id: "9", 
       budget_id: "1", 
       amount: "23500" 
      }, { 
       id: "10", 
       budget_id: "1", 
       amount: "116500" 
      } 
     ] 
    } 
} 

2つの項目の配列に一つだけの予算オブジェクトを取得する方法はあります:

{ 
    b: { 
     id: "1" 
    }, 
    bi: { 
     id: "9", 
     budget_id: "1", 
     amount: "23500" 
    } 
}, 
{ 
    b: { 
     id: "1" 
    }, 
    bi: { 
     id: "10", 
     budget_id: "1", 
     amount: "116500" 
    } 
} 

私はこのようになりますResultSetを期待していに対し?

答えて

0

この例では、モデル関係は使用していませんが、通常の左結合を使用するクエリビルダーです。これは常に複数の行を返します。

すべてのbudget_itemで実際に1つの予算のみを使用する場合は、上記で定義した関係を使用できます。

$budget = Budget::findFirst(22); 
$budget->id; // id of your Budget table and other columns 
$budget->budget_items; // This will contain array of all your budget_items relation 
+0

この場合、2つのリクエストがあります。 1つは予算用、もう1つはアイテム用です。 したがって、phqlまたはquery builderを使用してレコードとその関係を単一の配列として取得する方法はありませんか? – vansanblch

+1

これは照会のみでは実現できません。 QueryBuilderの方法を使用したい場合は、結果を反復処理し、要求した方法で変換するヘルパー関数を作成します。 –

関連する問題