2016-07-20 55 views
0

我有一個項目,我們不存儲用戶的姓名,只是用自己的用戶名進行的一切。數據表的查詢,而不是用戶名

我凸輪跨稱爲Ticketit包是用於Laravel幫助臺售票系統。

包使用的用戶名的一切,所以這引起了一些錯誤。我有一個getNameAttribute()訪問我的User模型等大部分這種滿足的包,但也有一些地方明確地稱爲雄辯::lists()查詢name

對於這些我手動更換nameusername裏面my own fork of this repo,並有此鏈接到我的項目。

預期在頁面上,但是當我試圖通過任何其他列進行排序或運行裏面搜索我的開發工具,我的網絡選項卡獲得500錯誤的數據表負載。

預覽響應顯示這一點:

QueryException在Connection.php線662: SQLSTATE [42S22]:柱未找到:在 'where子句'(SQL 1054未知列 'users.name':從SELECT COUNT(*)作爲骨料(選擇 '1' 作爲row_countticketit內上users加入usersid = ticketituser_id內上ticketit_statuses加入ticketit_statusesid = ticketitstatus_id內上加入。 id = ticketitpriority_id內部加入ticketit_categoriesticketit_categoriesid = ticketitcategory_id其中completed_at爲空和(LOWER(ticketitid)LIKE %%ħ%%或LOWER(subject)LIKE %%ħ%%或LOWER(ticketit_statusesname)LIKE %%ħ%%或LOWER(ticketitupdated_at) LIKE LIKE %%ħ%%或LOWER(ticketit_prioritiesname)LIKE %%ħ%%或LOWER(usersname)LIKE %%ħ%%或LOWER(ticketit_categories %%ħ%%或LOWER(usersname)。 name)LIKE %%^h %%))count_row_table)

此後員額,我得到[email protected]的路線。在原來的包裝是這樣的:

public function data(Datatables $datatables, $complete = false) 
    { 
     $user = $this->agent->find(auth()->user()->id); 
     if ($user->isAdmin()) { 
      if ($complete) { 
       $collection = Ticket::complete(); 
      } else { 
       $collection = Ticket::active(); 
      } 
     } elseif ($user->isAgent()) { 
      if ($complete) { 
       $collection = Ticket::complete()->agentUserTickets($user->id); 
      } else { 
       $collection = Ticket::active()->agentUserTickets($user->id); 
      } 
     } else { 
      if ($complete) { 
       $collection = Ticket::userTickets($user->id)->complete(); 
      } else { 
       $collection = Ticket::userTickets($user->id)->active(); 
      } 
     } 
     $collection 
      ->join('users', 'users.id', '=', 'ticketit.user_id') 
      ->join('ticketit_statuses', 'ticketit_statuses.id', '=', 'ticketit.status_id') 
      ->join('ticketit_priorities', 'ticketit_priorities.id', '=', 'ticketit.priority_id') 
      ->join('ticketit_categories', 'ticketit_categories.id', '=', 'ticketit.category_id') 
      ->select([ 
       'ticketit.id', 
       'ticketit.subject AS subject', 
       'ticketit_statuses.name AS status', 
       'ticketit_statuses.color AS color_status', 
       'ticketit_priorities.color AS color_priority', 
       'ticketit_categories.color AS color_category', 
       'ticketit.id AS agent', 
       'ticketit.updated_at AS updated_at', 
       'ticketit_priorities.name AS priority', 
       'users.name AS owner', 
       'ticketit.agent_id', 
       'ticketit_categories.name AS category', 
      ]); 
     $collection = $datatables->of($collection); 
     $this->renderTicketTable($collection); 
     $collection->editColumn('updated_at', '{!! \Carbon\Carbon::createFromFormat("Y-m-d H:i:s", $updated_at)->diffForHumans() !!}'); 
     return $collection->make(true); 
    } 

,我在我的叉子已經編輯到這一點:

public function data(Datatables $datatables, $complete = false) 
    { 
     $user = $this->agent->find(auth()->user()->id); 
     if ($user->isAdmin()) { 
      if ($complete) { 
       $collection = Ticket::complete(); 
      } else { 
       $collection = Ticket::active(); 
      } 
     } elseif ($user->isAgent()) { 
      if ($complete) { 
       $collection = Ticket::complete()->agentUserTickets($user->id); 
      } else { 
       $collection = Ticket::active()->agentUserTickets($user->id); 
      } 
     } else { 
      if ($complete) { 
       $collection = Ticket::userTickets($user->id)->complete(); 
      } else { 
       $collection = Ticket::userTickets($user->id)->active(); 
      } 
     } 
     $collection 
      ->join('users', 'users.id', '=', 'ticketit.user_id') 
      ->join('ticketit_statuses', 'ticketit_statuses.id', '=', 'ticketit.status_id') 
      ->join('ticketit_priorities', 'ticketit_priorities.id', '=', 'ticketit.priority_id') 
      ->join('ticketit_categories', 'ticketit_categories.id', '=', 'ticketit.category_id') 
      ->select([ 
       'ticketit.id', 
       'ticketit.subject AS subject', 
       'ticketit_statuses.name AS status', 
       'ticketit_statuses.color AS color_status', 
       'ticketit_priorities.color AS color_priority', 
       'ticketit_categories.color AS color_category', 
       'ticketit.id AS agent', 
       'ticketit.updated_at AS updated_at', 
       'ticketit_priorities.name AS priority', 
       'users.username AS owner', 
       'ticketit.agent_id', 
       'ticketit_categories.name AS category', 
      ]); 
     $collection = $datatables->of($collection); 
     $this->renderTicketTable($collection); 
     $collection->editColumn('updated_at', '{!! \Carbon\Carbon::createFromFormat("Y-m-d H:i:s", $updated_at)->diffForHumans() !!}'); 
     return $collection->make(true); 
    } 

有了這個,我已經改變了users.nameusers.username,但這並不是固定的問題我。

誰能幫我找出原因,還是什麼別的我需要改變,因爲我已經沒有任何運氣找出還有什麼地方我需要改變這一點。

回答

0

你會自己開車疲於編輯所有在第三方代碼試圖訪問name的地方。我的建議是在根,而不是補丁在很多地方來解決:

  1. 創建users表中的新name
  2. 裝滿值是列在username

如查詢:

ALTER TABLE `users` ADD COLUMN `name` VARCHAR(30) NOT NULL AFTER `username`; 
UPDATE `users` SET `name` = `username`; 

現在您的數據庫將具有您的插件所期望的架構。

+0

我可以做到這一點,但對我來說,這似乎更多的是一個補丁而不是根修復。正如我所說的,訪問者在99%的案例中解決了對「name」的請求。到目前爲止,只有3個案例明確尋找「name」,而我已將它們更改爲用戶名。我只是想從現在開始就知道它是從哪裏得到'name'的查詢,它將完全工作。如果我絕對必須這樣做,我會使用它,但爲了一個包的目的,這似乎毫無意義。 – James

0

我發現了這個問題,它在DataTable的初始化中調用users.name而不是users.username

更新後,清除視圖緩存php artisan view:clear它一切正常!

相關問題