2016-11-03 12 views
0

私はEloquentにはかなり新しく、何かの周りに頭を抱える問題があります。再帰的子コールから特定の列を選択するには

基本的に私は同じテーブル内の子を再帰的につかんでいるテーブルを持っています。

public function children() { 
    return $this->hasMany(static::class, 'parent_org_id'); 
} 

public function childrenRec() 
{ 
    return $this->children()->with('childrenRec'); 
} 
childrenRecは「parent_org_id」

私は、静的関数で、次からそれを呼んでいる今のように私が唯一IDを望むに基づいて、すべての子どもたちへの再帰呼び出しがある

組織最上位組織をつかんされ

self::select('id','name_en')->where('parent_org_id','=',0)->with('childrenRec')->get()->toArray(); 

(私のトップレベルのname_enの組織は、のparent_org_idの0を有する)。

私の問題は、再帰的につかんで子供たちにそれがIDにそれを制限するものではありません。また、name_en

私の質問は、に帰着点である:私は私の再帰から特定の列のみを選択することができますどのように 子供の呼び出し、同様にこれは物事を行うための '適切な'方法ですか?

返される配列は次のようになります。

array:1 [▼ 
    0 => array:4 [▼ 
    "id" => 1 
    "name_en" => "Org Unit" 
    "org_type" => null 
    "children_rec" => array:2 [▼ 
     0 => array:27 [▼ 
     "id" => 2 
     "name_en" => "My First Orgunit." 
     "code" => null 
     "abbreviation" => null 
     "address1" => "222 Street Street" 
     "address2" => null 
     "city_id" => 1 
     "province_id" => 14 
     "postalcode" => "C161L7" 
     "country_id" => 38 
     "contact_name" => null 
     "contact_title" => null 
     "email" => "[email protected]" 
     "fax" => "902-555-5555" 
     "phone1" => "5125125125125" 
     "phone2" => null 
     "org_type_id" => 1 
     "parent_org_id" => 1 
     "ref_id" => 79 
     "has_users" => 1 
     "created_at" => "2016-11-02 18:47:55" 
     "updated_at" => "2016-11-02 18:47:55" 
     "org_type" => array:4 [▶] 
     "children_rec" => array:1 [▶] 
     ] 
     1 => array:27 [▶] 
    ] 
    ] 
] 

ありがとうございます。

答えて

1

with()メソッドでリレーションクエリーにアクセスするには、リレーションシップの名前をキーとして配列を使用し、クエリービルドのインスタンスを挿入した配列を使用します。これを行うときに解決策を見つけ出すために永遠に私を奪われたのは、親と子のクエリが、定義された列を使って両方のクエリが別々に実行された後に関係が結びついているため、モデル上の関係で。あなたの状況では、次のようになります。

self::select('id','name_en') 
    ->where('parent_org_id','=',0) 
    ->with(['childrenRec' => function($query) { 
     return $query->select('id', 'name_en', 'parent_org_id'); 
    }]) 
    ->get() 
    ->toArray(); 

あなたは関係が執着しませんサブクエリでparent_org_idが含まれていない場合。

Docs

+1

ありがとうございました!私は以前これを試していましたが、私は決して 'parent_org_id'を私の質問選択に入れませんでした。それはうまくいきませんでした! もう一度ありがとうございます。 – Crawdingle

0

これを試してみてください:

public function childrenRec() 
{ 
    return $this->children()->with(['childrenRec' => function($query){    
     $query->select('id','name_en'); 
    }]); 
} 
関連する問題