2017-11-15 22 views
0

계산이 필요하고 결과를 다시 얻거나 각 행에 대해 매번 쿼리를 수행하고 싶지는 않습니다. 이것이 열망하는로드를 원하는 이유입니다.

열망한로드와 hasManyThrough 관계 계산 (숫자 만 필요)

Admins 
    id 

Posts 
    id 
    admin_id 

Comments 
    id 
    user_id //nullable (null if comment from admin) 
    admin_id //nullable (null if comment from user) 
    news_id 

가 지금은 하나의 관리자의 모든 게시물과 게시물에 대한 모든 의견을 검색하지 않고, 그 게시물에서 계산 모든 의견을 검색 할 만 COUNT :

나는 다음과 같이 세 테이블이 덧글, n + 1 쿼리 문제를 피하기 위해 열심히로드;

여기에 우리가 관계는 다음과 같은 열망로드와 함께 사용할 수 있도록해야한다고 생각 : news_id이 Admins 테이블에 있지 않기 때문에 여기에

//admin model  
public function commentsCountRelation() 
     { 
      return $this->hasManyThrough(Comment::class, News::class, 'admin_id', 'news_id') 
       ->selectRaw('news_id, count(*) as count') 
       ->groupBy('news_id'); 

     } 

--Look 내가 hasManyThrough 관계를 사용했다.

가 그럼 난, 속성을해야처럼 easyly 수를 액세스 할 수 :

public function getCommentsCountAttribute() 
    { 
     return $this->commentsCountRelation->first()->count ?? 0; 
    } 

그런 다음 원하는 액세스 :

$admin = Admin::with('commentsCountRelation')->findOrFail($id); 
$admin->commentsCount; 

를하지만 항상 null를 반환, 그 이유는? 어떤 도움은 매우 hasManyThrough을 사용할 필요가 없어

답변

2

을 이해할 수있을 것이다

//relation 
public function ordersCountRelation() 
    { 
     return $this->hasOne(Order::class)->selectRaw('user_id, count(*) as count') 
      ->groupBy('user_id'); 

    } 

//attribute 
public function getOrdersCountAttribute() 
    { 
     return $this->ordersCountRelation->count ?? 0; 
    } 

//Then accessed like: 
$user = User::with('ordersCountRelation')->find($id); 
$user->ordersCount; //return only count 

: hasMany & belongsTo에 대한

다음 작품은, 내가 좋아하는 내 다른 모델을 사용했습니다.

$admin->posts->withCount('comments')->get();

는 다음에 액세스 할 수 있습니다 : $comments_count

+0

내가 이해하지 못했다
은 어떤 관계와 withCount 방법을 사용합니다. 앱에 여러 개의 관리자가 있으며 모든 사용자에게 게시물이 있습니다. 이제 특정 관리자 및 모든 의견의 모든 게시물이 필요합니다. 질문에서 나는 테이블 구조에 대해 설명했으며'Admin' 모델로 작업하는 동안 코멘트 수를 필요로합니다. 어떻게 설명 할 수 있습니까? 'hasManyThrough'없이이 작업을 수행합니까? 모든 관리자의 게시물 수는이 관리자의 게시물 수를 빼고 싶지 않습니다. 내가 필요 같은이 (루프 후)'$ 관리 -> 포스트> commentCount' 나는 것 엔 당신이 나에게 몇 가지 코드 예제를 제공하거나 간단한 – APu

+0

관계에 대해 설명하면 감사 :'Admin'은''와 hasMany'있다 Post'는'hasMany'와'Comment'를 가지고 있습니다 – APu

+0

나는 여러분의 방법이 열심히로드하는 것을 사용하지 않는다고 생각합니까? 그렇습니다. 또한'$ admin-> post-> comments-> count()'대신에 여러분의 언급 방법을 사용하여 효율성이 얼마나되는지 알려주시겠습니까? – APu