2017-11-28 7 views
0

Laravel Backpack을 사용하여 적절한 백 오피스를 만들고 있습니다.Laravel Backpack - 여러 조인 테이블이있는 필터를 적용한 후 ID가 변경됨

하지만 필터 옵션에는 약간의 문제가 있습니다. 데이터베이스에 기본 키로 연결된 sereval 테이블이 있습니다.

이 이런 일을 수행합니다

사이트 -> 소포가 (SITE_ID했습니다) -> 트리 (가 parcel_id) 나는 이런 식으로 뭔가 할 TreeCrudCrontroller.php 내 코드에서

:

public function parcel() 
{ 
return $this->belongsTo(Parcel::class); 
} 

public function displaySite() 
{ 
    $site = Tree::with('parcel.site')->find($this->id); 
    return $site->parcel->site->name; 
} 

public function displayOwner() 
{ 
    $owner = Tree::with('parcel.site.owner')->find($this->id); 
    return $owner->parcel->site->owner->full_name; 
} 

문제는 내 트리 모델에서

$this->crud->addFilter([ 
    'type' => 'text', 
    'name' => 'site', 
    'label' => 'Site' 
], 
    false, 
    function ($value) { 
     $this->crud->addClause('join', 'parcels', 'parcel_id', 'parcels.id'); 
     $this->crud->addClause('join', 'sites', 'parcels.site_id', 'sites.id'); 
     $this->crud->addClause('where', 'sites.name', 'LIKE', "%$value%"); 
    } 
);` 

$this->crud->addFilter([ 
    'type' => 'text', 
    'name' => 'owner', 
    'label' => 'Propriétaire' 
], 
    false, 
    function ($value) { 
     $this->crud->addClause('join', 'parcels', 'parcel_id', 'parcels.id'); 
     $this->crud->addClause('join', 'sites', 'parcels.site_id', 'sites.id'); 
     $this->crud->addClause('join', 'owners', 'sites.owner_id', 'owners.id'); 
     $this->crud->addClause('where', 'owners.first_name', 'LIKE', "%$value%"); 
    } 
); 

,이 코드가 필터없이 처음으로 테이블을 표시하면 사이트와 소유자가 모두 오른쪽 텍스트를 표시하지만 둘 중 하나를 필터링하면 현재 트리의 ID가 변경됩니다. 내가 사이트를 기준으로 필터링하는 데 사용하는 경우, 트리 ID가 사이트 ID 내가 소포를 기준으로 필터링하는 데 사용하는 경우에 의해 변경

, 트리 ID는

내가 모르는 소포 ID에 의해 변경되는 경우 I 뭔가 잘못되었거나 버그 일 경우.

나는 Laravel, 배낭 /베이스 및 배낭/crud의 최신 버전입니다.

는 내가 수 : 당신의 도움이

편집에 대한

감사로 이해 해요 희망 : 내 PMA에서 SQL 요청을하려고 할 때, 나는 이런 식으로 뭔가가 : SQL result

Laravel이 최초 ID 열에도 불구하고 마지막 ID 열을 유지한다고 생각합니다.

답변

0

실제로 선택 닫기를 추가해야합니다.

$this->crud->addClause('select', 'my_table.*'); 

이상하게 보입니다.