2015-10-05 102 views
0

我有一種方法,我將Collection s存儲到Collection中。 問題是我得到一個多維Collection,我需要一維Collection,所以我可以在Laravel中使用Collection的可用方法。Laravel轉換多維集合

我試過用一個循環來轉換我的多維Collection,它工作正常,但我期待的方式使它更清潔一點。

感謝您的幫助和提示。

$activities = new Collection(); 
$last  = new Collection(); 

foreach ($this->members()->get() as $member) 
{ 
    $memberActivity = Activity::where('user_id', $member->id)->get(); 
    $activities->add($memberActivity); 
} 

foreach($activities as $activity) 
{ 
    foreach($activity as $result) 
    { 
     $last->add($result); 
    } 
} 

$result = $result->sortBy('created_at'); 

return $result->last(); 
+0

1.解釋你的模型之間的關係。 2.解釋你想要改進的是什麼,或者你當前的代碼有什麼問題。 – bernie

回答

0

不知道你在某些方面想達到什麼效果,但這看起來像是多對多的關係。

從您的問題看,您似乎有3個表格membersactivitiesmember_activities,而member_activities是您的數據透視表。

所以你應該有2個雄辯的模型:MemberActivity。見http://laravel.com/docs/5.1/eloquent-relationships#many-to-many

class Member extends Model 
{ 
    public function activities() 
    { 
    return $this->belongsToMany(Activity::class, 'member_activities'); 
    } 
} 

class Activity extends Model 
{ 
    public function members() 
    { 
    return $this->belongsToMany(Member::class, 'member_activities'); 
    } 
} 

所以,你可以做類似下面的訪問成員的活動:

$memberWithActivities = Member::with('activities')->find($memberId);

$member = Member::all(); 
foreach ($member->activities as $activity) { 
    // 
} 

$activities = Member::find($memberId)->activities()->orderBy('name')->get();

如果您想將活動添加到一個成員,你可以attachdetach - 見http://laravel.com/docs/5.1/eloquent-relationships#inserting-many-to-many-relationships

NB - 我沒有檢查我的語法,但概念仍然適用。