私は、ユーザーの名前を格納せず、すべてのユーザー名を使用するプロジェクトがあります。ユーザー名ではなく名前を使用したデータ型クエリ
私はLaravelのためのヘルプデスクチケットシステムであるTicketitと呼ばれるパッケージを利用しています。
このパッケージでは、すべてのユーザーの名前が使用されています。そのため、いくつかのエラーが発生しました。私はUser
モデルにgetNameAttribute()
アクセサーを持っています。ほとんどの場合、これはパッケージを満たしますが、明示的にname
をEloquent ::lists()
というクエリで呼び出す場所がありました。
私は手動でname
をusername
に置き換えてmy own fork of this repoの中に入れ、これを私のプロジェクトまでリンクしてください。
データテーブルがページ上にロードされますが、他の列で並べ替えたり、内部で検索を実行しようとすると、開発者ツールの[ネットワーク]タブに500のエラーが表示されます。 Connection.phpラインにおける
QueryException 662:応答をプレビュー
この示し SQLSTATE [42S22]:見つからないカラム:1054不明な列 'users.name '句'(SQLで: SELECT COUNT(*)を選択し(から骨材として '1' として
row_count
ticketit
から内側users
にusers
に加わる。id
=ticketit
。user_id
内側ticketit_statuses
にticketit_statuses
に加わる。id
=ticketit
。status_id
内側がにticketit_priorities
に参加します。id
=ticketit
。priority_id
内部結合ticketit_categories
はticketit_categories
です。id
=ticketit
。completed_at
は%%時間%%以下(ticketit_statuses
LIKE %%時間%%以下(subject
)LIKE)ヌルと(ticketit
(LOWER。id
あるcategory_id
。name
)%%時間%%以下(ticketit
LIKE。updated_at
)時間%%以下(users
。name
)%%時間%%以下(ticketit_priorities
。name
)LIKE %%時間%%以下(users
。name
)%%時間%%以下(ticketit_categories
LIKE LIKE %% LIKE。この記事は、私が[email protected]
に着くルート後の%% %% H))count_row_table)
LIKE name
)。私はフォークでこれに編集した
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
に変更されているが、これは問題のために固定されていないオリジナルのパッケージでは、これは、私。
私はこれを変更する必要があるかどうかを調べるために何か幸運を覚えていないので、誰かがなぜ変更する必要があるのかを理解できますか?
私はこれを行うことができましたが、これはルート修正よりもパッチのほうが多いようです。私が言ったように、アクセサーは99%のケースで 'name 'の要求を解決します。これまでに 'name'を明示的に探しているところは3つしかなく、これをusernameに変更しました。私は今から 'name'のクエリをどこから取得しているのか把握しようとしており、完全に動作します。私が絶対に必要な場合はこれを使用しますが、1つのパッケージのためにそれを行う必要があることは無意味なようです。 – James