我有一个项目,我们不存储用户的名称,而只使用他们的用户名进行所有操作。
我发现了一个名为Ticketit的包,它是 Laravel 的帮助台票务系统。
该软件包对所有内容都使用用户名,因此这导致了一些错误。我的模型上有一个getNameAttribute()
访问器User
,因此在大多数情况下这满足了包,但是有些地方name
在 Eloquent::lists()
查询中显式调用。
对于这些,我在我自己的这个 repo 的 fork 中手动替换name
,并将其链接到我的项目。username
数据表在页面上按预期加载,但是当我尝试按任何其他列排序或在其中运行搜索时,我在开发人员工具的“网络”选项卡中收到 500 个错误。
预览响应显示:
Connection.php 第 662 行中的 QueryException:SQLSTATE [42S22]:找不到列:1054 'where 子句'中的未知列 'users.name'(SQL:选择计数(*)作为聚合来自(
row_count
从ticketit
内部连接中选择 '1'users
onusers
.id
=ticketit
.user_id
inner jointicketit_statuses
onticketit_statuses
.id
=ticketit
.status_id
inner jointicketit_priorities
onticketit_priorities
.id
=ticketit
.priority_id
inner jointicketit_categories
onticketit_categories
.id
=ticketit
.category_id
wherecompleted_at
is null and (LOWER(ticketit
.id
) LIKE %%h%% or LOWER(subject
) LIKE %%h%% or LOWER(ticketit_statuses
.name
) LIKE %%h%% 或 LOWER(ticketit
.updated_at
) LIKE %%h%% 或 LOWER(users
.name
) LIKE %%h%% 或 LOWER(ticketit_priorities
.name
) LIKE %%h%% 或 LOWER(users
.name
) LIKE %%h%% 或 LOWER(ticketit_categories
.name
) LIKE %%h%%)) count_row_table)
按照这篇文章的路线,我到达TicketController@data
. 在原始包中,这是:
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.name
为users.username
,但这并不能解决我的问题。
谁能帮我弄清楚为什么,或者我还需要改变什么,因为我没有运气弄清楚我还需要在哪里改变它。