2017-11-28 16 views
0

Laravel Backpackを使用して適切なバックオフィスを作成しています。Laravelバックパック - 複数のジョインテーブルでフィルタを適用した後にIDが変更されました

しかし、フィルタオプションには少し問題があります。 プライマリキーでリンクされているデータベースにserevalテーブルがあります。

それはこのような何かを行います。

サイト - 私はこのような何かをTreeCrudCrontroller.phpで、私のコードでは>ツリー(parcel_idを持っている)

- >小包を(SITE_IDました)

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%"); 
    } 
); 

、私はこのコードを持っていますフィルタを使用せずに初めてテーブルを表示すると、サイトと所有者の両方が正しいテキストを表示しますが、そのうちの1つをフィルタリングすると、現在のツリーのIDが変化しています。

私はサイトによってフィルタリングするために使用する場合は、ツリーIDは、私は小包でフィルタするために使用する場合は、ツリーIDがIならば、私は知らないパーセルID

によって変更されたサイトのID によって変更されます何か間違っているか、バグかどうか

私はLaravel、バックパック/ベース、バックパック/クルードの最新バージョンです。

私はできるだけ理解しやすいんだことを願っています:)あなたの助け

編集用

ありがとう:私は私のPMAでのSQL要求をしようとすると、私はこのようなものを持っている: SQL result

私はLaravelが最初のID欄にもかかわらず最後のID列を保持していると思います。

答えて

0

実際には選択を閉じるだけです。

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

奇妙に見えますが動作します。

関連する問題