laravel5.1 按日期排序结果 (created_at)
laravel5.1 order result by date (created_at)
我想按日期 (created_at) 订购我的 ticket_replies。有关如何按日期排序的 ticket_replies 的任何提示(最旧的排在最前面,至少是最新的)。我是否需要使用 sortByDesc() 或 orderBy() 语句?
表格设计:
tickets: |id|supp_id|title|user_id|...
ticket_replies: |id|ticket_id|user_id|text|created_at
files: |id|ticket_replie_id|name
控制器:
$ticket = Auth::user()->tickets()->join("ticket_replies", "ticket.id", "=", "ticket_replies.ticket_id")->where('id', $id)->with(['ticket_replie.file'])->orderBy('ticket_replies.created_at')->firstOrFail();
return view('protected.ticketDetail', compact('ticket'));
查看:
<div class="container">
ID: {{$ticket->id}}
title: {{ $ticket->title}}<br>
status: {{ returnStatus($ticket->status) }}<br>
Ticket created: {{ $ticket->created_at }}<br>
@if (!$ticket->supporter)
supporter:-<br></br></br>
@else
supporter {{ $ticket->supporter->username }}<br></br>
@endif
@foreach($ticket->ticket_replie as $reply)
@if ($reply->file == null)
reply text: {{ $reply->text }}</br>
@else
reply text: {{ $reply->text }}</br>
file: <a href="/path/to/file/{!! $reply->file->name !!}">Download file</a><br>
@endif
reply created at: {{$reply->created_at}}</br></br>
@endforeach
</div>
当我 运行 这段代码失败时说:
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous (SQL: select * from `tickets` inner join `ticket_replies` on `ticket`.`id` = `ticket_replies`.`ticket_id` where `tickets`.`user_id` = 1 and `tickets`.`user_id` is not null and `id` = 43 order by `ticket_replies`.`created_at` asc limit 1)
我是否需要为此修改我的 ticket_replies 模型,或者我是否需要采取其他方法来解决这个问题?
你应该添加类似
的内容
join("ticket_replies", "ticket.id", "=", "ticket_replies.ticket_id")
您的查询。否则,您不会从 ticket_replies
table 获得任何数据,因为 with()
会为您创建对 select 所有其他数据的单独查询。
另一种选择是将其与 with()
子查询一起使用:
->with([
'ticket_replies' => function ($query) {
return $query->orderBy('created_at', 'desc');
}
])
取决于你需要什么。
我想按日期 (created_at) 订购我的 ticket_replies。有关如何按日期排序的 ticket_replies 的任何提示(最旧的排在最前面,至少是最新的)。我是否需要使用 sortByDesc() 或 orderBy() 语句? 表格设计:
tickets: |id|supp_id|title|user_id|...
ticket_replies: |id|ticket_id|user_id|text|created_at
files: |id|ticket_replie_id|name
控制器:
$ticket = Auth::user()->tickets()->join("ticket_replies", "ticket.id", "=", "ticket_replies.ticket_id")->where('id', $id)->with(['ticket_replie.file'])->orderBy('ticket_replies.created_at')->firstOrFail();
return view('protected.ticketDetail', compact('ticket'));
查看:
<div class="container">
ID: {{$ticket->id}}
title: {{ $ticket->title}}<br>
status: {{ returnStatus($ticket->status) }}<br>
Ticket created: {{ $ticket->created_at }}<br>
@if (!$ticket->supporter)
supporter:-<br></br></br>
@else
supporter {{ $ticket->supporter->username }}<br></br>
@endif
@foreach($ticket->ticket_replie as $reply)
@if ($reply->file == null)
reply text: {{ $reply->text }}</br>
@else
reply text: {{ $reply->text }}</br>
file: <a href="/path/to/file/{!! $reply->file->name !!}">Download file</a><br>
@endif
reply created at: {{$reply->created_at}}</br></br>
@endforeach
</div>
当我 运行 这段代码失败时说:
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous (SQL: select * from `tickets` inner join `ticket_replies` on `ticket`.`id` = `ticket_replies`.`ticket_id` where `tickets`.`user_id` = 1 and `tickets`.`user_id` is not null and `id` = 43 order by `ticket_replies`.`created_at` asc limit 1)
我是否需要为此修改我的 ticket_replies 模型,或者我是否需要采取其他方法来解决这个问题?
你应该添加类似
的内容join("ticket_replies", "ticket.id", "=", "ticket_replies.ticket_id")
您的查询。否则,您不会从 ticket_replies
table 获得任何数据,因为 with()
会为您创建对 select 所有其他数据的单独查询。
另一种选择是将其与 with()
子查询一起使用:
->with([
'ticket_replies' => function ($query) {
return $query->orderBy('created_at', 'desc');
}
])
取决于你需要什么。