ユーザーの名前を保存せず、すべてにユーザー名を使用するプロジェクトがあります。
Laravel のヘルプデスク チケット システムであるTicketitというパッケージに出会いました。
パッケージはすべてにユーザーの名前を使用するため、いくつかのエラーが発生しました。私はgetNameAttribute()自分のモデルにアクセサーを持っているので、ほとんどの場合、これはパッケージを満たしていますが、EloquentクエリUserで明示的に呼び出される場所がいくつかありました。name::lists()
これらについては、このレポの自分のフォーク内で手動で置き換えname、これをプロジェクトにリンクしました。username
データテーブルは期待どおりにページに読み込まれますが、他の列で並べ替えたり、その中で検索を実行しようとすると、開発者ツールの [ネットワーク] タブに 500 エラーが表示されます。
応答をプレビューすると、次のようになります。
Connection.php 行 662 の QueryException: SQLSTATE[42S22]: 列が見つかりません: 1054 Unknown column 'users.name' in 'where clause' (SQL: select count(*) as aggregate from (select '1' as
row_countfromticketitinner joinusersonusers.id=ticketit.user_idinner jointicketit_statusesonticketit_statuses.id=ticketit.status_idinner jointicketit_prioritiesonticketit_priorities.id=ticketit.priority_idinner jointicketit_categoriesonticketit_categories.id=ticketit.category_idここで、completed_atは null かつ (LOWER(ticketit.id) LIKE %%h%% または LOWER(subject) LIKE %%h%% または 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が、これで問題が解決するわけではありません。
これを変更する必要がある他の場所を見つけることができなかったので、誰かが理由、または他に何を変更する必要があるかを理解するのを手伝ってくれますか?