2017-03-20 7 views
0

그래서이 Laravel Datatables 프로젝트를하고 난 당신이 특정 값을 클릭하면, 그것은 PHP 백 엔드에 AJAX 요청을 보내드립니다 열을 만들려고하고 의지하고있어 Laravel Datatables의 관계를 필터링 할 수 없습니다 필터 특정 열과 클릭 한 값을 기준으로 DataTable의 결과를보십시오.

$sign = Request::input('sign'); 

    return $this->datatables 
     ->eloquent($this->query()) 
     ->filter(function ($query) use ($sign) { 
      if (request()->has('sign')) { 
       $query->where('signs.id', "'$sign'"); 
      } 
     }, true) 
     ->addColumn('admin', function($user) { 
      return $user->admin == 1 ? '<span class="fa fa-star"></span>' : '<span class="fa fa-star-o"></span>'; 
     })... 

문제는 filter 방법에 내가 관련 signs 테이블에 Where 절을 할 수있다. users 테이블의 signs.id 열을 쿼리하려고하는데, 이는 내가 원하는 것이 아닙니다. 내 모델에

내가 관계는이

public function signs(){ 
    return $this->belongsTo('App\Models\Sign', 'sign_id', 'id'); 
} 

같이 정의하고 난이

public function query() 
{ 
    $query = User::with('signs'); 

    return $this->applyScopes($query); 
} 

같은 징후를 사용자 모델 정의 된 데이터 테이블에 기본 쿼리를 발행하고 있습니다 내가 도대체 ​​뭘 잘못하고있는 겁니까? 이 관계를 통해 사용자를 필터링 할 수없는 이유는 무엇입니까? 어떤 도움을 주셔서 감사하겠습니다. 이미 시간을 보냈으니 혼자서는 알 수 없습니다.

답변

0

나는 내가 마침내 내가 전에 이런 종류의 일을했고 단순히 그것을 기억하지 수 있기 때문에, 내가

return $this->datatables 
     ->eloquent($this->query()) 
     ->filter(function ($query) use ($sign) { 
      if (request()->has('sign')) { 
       $query->whereHas('signs', function($q) use($sign){ 
        $q->where('sign', $sign); 
       }); 
      } 
     }, true) 

는 그냥 whereHas 할 ... 녹슨지고있어 그것을 알아 낸 것 같아요 '부호'참조를 리 바인드 한 다음 쿼리하십시오.