2014-01-10 8 views
2

부드러운 삭제를 사용하는 Comments 모델이 있습니다. 관계와 Post 모델이 있습니다.laravel에서 소프트 삭제 된 항목을 반환하는 count()

내 사이트에 연결된 기본 모바일 앱이 있으며 게시물에 대한 정보를 보내고 어떤 이유로 연체 된 삭제 된 항목이 반환됩니다.

나는 일하고 내 게시물 모델에

public function getCommentcountAttribute() 
{  
    return DB::table('comments') 
     ->where('post_id',$this->id) 
     ->where('deleted_at','=',NULL) 
     ->count();  
} 

protected $appends = array('score','commentcount', 'ups', 'downs'); 

을 사용하여 댓글 수를 보내는 포스트 배열을 가지고있다. 나는 또한 또한 내가 ->whereNUll('deleted_at')에 모두 ->hasMany('Comment')과 행운과 ->belongsTo('Post') 추가 해봤의 관계를 정의 할 때

public function getCommentcountAttribute() 
{ 
    return $this->comments()->count(); 
} 

public function getCommentcountAttribute() 
{ 
    return $this->comments()->whereNull('deleted_at')->count(); 
    // also: return $this->comments()->where('deleted_at',NULL)->count(); 
} 

을 시도했습니다.

나는 데이터베이스를 확인하고 내가 유창함과 웅변은 (I 테스트 사용하고 포스트되는 31)

SELECT * FROM `comments` WHERE post_id=31 and deleted_at=null 

입니다 발생 될 것으로 예상하고있어 SQL을 실행했습니다. 아무것도 작동하지 않습니다. 여러분이 더 이상 특정 기능을 볼 필요가 있다면 저에게 전체 모델을 게시하지 말고 알려주십시오.

답변

2

->whereRaw('deleted_at = ?',array(NULL))으로 작업하게 만들었습니다. 그것은 나에게 꽤 해커처럼 보인다. 나는 기꺼이 더 나은 대답을 받아 들일 것이다.

1

모델에서 소프트 삭제를 활성화해야합니다.

class Comment extends Eloquent { 

    protected $softDelete = true; 

} 

그게 전부입니다.

그리고 쿼리의 조항은 어디 다음을 포함 할 필요가 없습니다 : 모델 만에

return \App\Comments::count(); 

소프트 삭제 작동하지 쿼리 :

return DB::table('comments') 
     ->where('post_id',$this->id) 
     //->where('deleted_at','=',NULL) // no needed, Laravel by default will include this condition 
     ->count(); 


public function getCommentcountAttribute() 
{ 
    // remove ->whereNull('deleted_at') 
    return $this->comments()->count(); 
} 
+0

내가 이미 완료했음을 포함해야합니다. Soft Deleting은'-> toArray()'와'count()'를 사용할 때를 제외하고 어디에서나 작동합니다. – MrJellyhands

1
가 코드를 변경

class Comment extends Eloquent 
{ 
    protected $softDelete = true; 

}