2014-11-17 36 views
0

我不知道如何提出這個問題,但我會盡我所能。如何在其父集合中進行雄辯的推送子集合?

  • Subcategories表有與Categories
  • Subcategories表有與 Subtagsmany-to-many關係的一個一對一的關係。
  • 我的表格SubtagsTags 表格的關係爲one-to-many

我有一個Categories

+------+--------+ 
+ id + name + 
+------+--------+ 

我有一個Subcategories

+------+----------------+--------+ 
+ id + categories_id + name + 
+------+----------------+--------+ 

Class Subcategory { 
    public function category() 
    { 
     return $this->hasOne('Category', 'id', 'categories_id'); 
    } 

    public function subtags() 
    { 
     return $this->belongsToMany('Subtag', 'subcategories_has_subtags', 'subcategories_id', 'subtags_id'); 
    } 
} 

我有一個Tags

+------+--------+ 
+ id + name + 
+------+--------+ 

Class Tag { 
    public function subtag() 
    { 
     return $this->hasMany('Subtag', 'tags_id', 'id'); 
    } 
} 

我有SubtagsŤ能夠

+------+----------+--------+ 
+ id + tags_id + name + 
+------+----------+--------+ 

Class Subtag { 
    public function subcategories() 
    { 
     return $this->belongsToMany('Subcategory', 'subcategories_has_subtags', 'subtags_id', 'subcategories_id'); 
    } 

    public function tag() 
    { 
     return $this->hasOne('Tag', 'id', 'tags_id'); 
    } 
} 

我有這個疑問:

Post::find($id)->with('categories.subcategories.subtags'); 

什麼雄辯返回與此查詢:

Post Collection Test 
    => Category Collection 
      => Subcategory Collection 
       => Subtag Collection 1 
        => Tag Collection (tags_id) 1 
       => Subtag Collection 2 
        => Tag Collection (tags_id) 1 
       => Subtag Collection 3 
        => Tag Collection (tags_id) 1 
       => Subtag Collection 4 
        => Tag Collection (tags_id) 2 

我想要什麼:

Post Collection Test 
    => Category Collection 
      => Subcategory Collection 
       => Tag Collection (tags_id) 1 
        => Subtag Collection 1 
        => Subtag Collection 2 
        => Subtag Collection 3 
       => Tag Collection (tags_id) 2 
        => Subtag Collection 4 

用雄辯是否有可能?或者我必須手動?

謝謝你提前

+0

1您可以使用('categories.subcategories.subtags')'代替嵌套的閉包。 2你不清楚你問什麼,所以重新提出你的問題並添加一個例子。 –

+0

對不起,我的詞彙量有限,我沒有確切的詞彙。我已經添加了一個我想要Eloquent返回的例子。 – KeizerBridge

+0

不要擔心vocab,我只是說它不清楚。顯示涉及的表格以及您需要的結果。順便說一句'Post :: find($ id) - > with(..) - > get()'有點不對 - 'find'已經提取了結果,然後用'get'運行另一個查詢。 –

回答

0

第一件事第一!你的關係是錯在這裏:

// Subtag model 
public function tag() 
{ 
    return $this->hasOne('Tag', 'id', 'tags_id'); 
} 

它應該是:

public function tag() 
{ 
    return $this->belongsTo('Tag', 'tags_id', 'id'); 
} 

現在,由於subcategories - tagssubcategories - subtags是分開的關係,你不能做你問什麼,用雄辯的特點。你可以在集合上手動完成,但是我會重新考慮你的整個模式。你確定你想要所有那些Sub模型和表?

請注意,您可以使用SubCategory模型使用與Category模型相同的模型,但具有全局範圍,只是如此您知道。

+0

是的你是完全正確的..我的錯誤,我從來沒有見過這個錯誤,因爲我從來沒有使用這種方法。 就像你說的我應該重新考慮我的模式。 – KeizerBridge