簡體   English   中英

Laravel背包-應用帶有多個聯接表的過濾器后ID發生更改

[英]Laravel Backpack - ID changed after apply filter with several join table

我正在使用Laravel背包創建適當的后台。

但是我對filter選項有一點問題。 我的數據庫中有服務表,這些表通過主鍵鏈接。

它做這樣的事情:

站點->包裹(具有site_id)->樹(具有parcel_id)

在我的代碼中,在TreeCrudCrontroller.php中,我執行以下操作:

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

在我的Tree模型中,我有以下代碼:

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;
}

問題是,當我第一次顯示表時,沒有過濾器,當我對其中一個進行過濾時,站點和所有者都會顯示正確的文本,但當前樹的ID會發生變化。

如果我用於按站點進行過濾,則樹ID會被站點ID更改。

我不知道我做錯了什么還是錯誤。

我使用的是最新版本的Laravel,背包/底座和背包/背包。

我希望我盡可能的容易理解:)

謝謝你的幫助👍

編輯:當我嘗試在PMA中的SQL請求時,我有這樣的東西: SQL結果

所以我認為Laravel會保留最后一個ID列,盡管第一個ID列

實際上,只需要添加一個選擇關閉。

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

看起來很奇怪,但是可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM