Php laravel中登录用户的查询结果
我目前已经建立了一个票证系统,我想让用户查看他们打开和关闭的票证的状态 我可以查询数据库并获取所有要显示的票证,但我只希望登录用户的票证显示。我将如何实现这一点。我已经做了几天了,现在不知所措 我所拥有的: 路由(由于Php laravel中登录用户的查询结果,php,laravel,laravel-5,ticket-system,Php,Laravel,Laravel 5,Ticket System,我目前已经建立了一个票证系统,我想让用户查看他们打开和关闭的票证的状态 我可以查询数据库并获取所有要显示的票证,但我只希望登录用户的票证显示。我将如何实现这一点。我已经做了几天了,现在不知所措 我所拥有的: 路由(由于{ticketId},返回404)/注意:如果我从路由中删除{ticketId},我会得到类型错误:*函数App\Http\Controllers\ticketscoller::openTickets()的参数太少,传递了0个,预期正好是1个“* 票务控制员 public func
{ticketId}
,返回404)/注意:如果我从路由中删除{ticketId}
,我会得到类型错误:*函数App\Http\Controllers\ticketscoller::openTickets()的参数太少,传递了0个,预期正好是1个“*
票务控制员
public function openTickets($ticketId){
$tickets=Classified::find($ticketId);
$ticketId = Auth::user('id');
$tickets = DB::table('tickets')->orderBy('st_id', 'DESC')->where('status', '=', 'OPEN')->where('user_id', '=', $id)->paginate(4);
return view('tickets.open-tickets',compact('tickets'));
车票型号
class Ticket extends Model
{
use Notifiable, HasPermissionsTrait;
protected $ticketId = 'st_id';
protected $guarded=[];
protected $dispatchesEvents = [
'created' => Events\NewTicket::class
];
}
工作查询以显示所有票据
public function openTickets(){
$tickets = DB::table('tickets')->orderBy('st_id', 'DESC')->where('status', '=', 'OPEN')->paginate(4);
return view('tickets.open-tickets',compact('tickets'));
我应该提到的是,我在tickets表中将我的id更改为st_id,因为我使用该id来显示票号,如下所示201804001
同样,我只是在寻找一个解决方案,让登录用户查看他们的票据,而不是数据库中的所有票据
票务表的图像:
您已经有了一个票证模型,但正在使用DB facade查询票证表 相反,通过一对多关系将票证与用户关联
class Ticket extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
}
在用户类中:
public function tickets()
{
return $this->hasMany(Ticket::class);
}
现在您可以执行$user->tickets()->where('status','OPEN')->get();
为该用户获取所有打开的票据
更进一步,您可以向票证模型添加一个范围
在您的客票舱:
public function scopeOpen($query)
{
return $query->where('status', 'OPEN');
}
这将使您的查询更加流畅:
$user->tickets()->open()->get();
要将票据与用户关联,只需执行以下操作:
$user->tickets()->save(new Ticket([
'status' => 'open',
'title' => 'Problem logging in',
'body' => 'Lorem ipsum dolor sit amet'
]));
有关雄辩关系(特别是一对多关系)的更多信息,请参见
要列出用户的所有未结票证,请使用以下路径:
Route::get('tickets/opentickets/','TicketsController@index);
要显示个人车票,您需要以下路线:
Route::get('tickets/opentickets/{ticket}','TicketsController@show)
在票证控制器中使用以下方法:
public function index()
{
// user() is a helper for Auth::user()
$tickets = user()->tickets()->open()->paginate(4);
return view('tickets.open-tickets', compact('tickets'));
}
public function show(Ticket $ticket)
{
// If the ticket does not belong to the logged in user, abort
if ($ticket->user_id != user()->id) {
abort(403, 'This is not your ticket');
}
return view('tickets.show', compact('ticket'));
}
您会注意到控制器类型中的show
方法提示了Ticket
模型。这称为路由模型绑定,非常有用,您可以
与您的原始代码相比,我似乎过于复杂了,但是相信我,最好尽早理解这些东西!它们会在开发过程中对您有很大帮助。此子句中定义的$id
变量'user\u id','=',$id
在哪里?您需要的是关系,请检查:我正在尝试g将身份验证用户的id
与tickets表中的user\u id
匹配。然后作为@Sachasaid@echo我不确定您是否理解我的意思,但该代码中有一个明显的错误。$id
没有在任何地方定义。看起来您有很多问题(您似乎试图使用特定的资源路由返回列表,这非常令人困惑),但要做的第一件事是修复该错误变量。感谢您的帮助,很抱歉我不了解,但是$user->tickets()->where('status','OPEN')->get()
go?在我的票证模型或票证控制器中?对Laravel来说,这是一个全新的概念,我试图将我的头脑完全集中在票证控制器中。我将更新我的答案,以显示如何获得个人票证。嘿,如果你不介意的话,我还有最后一个问题。我不断收到错误调用未定义函数App\Http\Controllers\user()
。我该如何解决这个问题?它正在这里发生。if($ticket->user\u id!=user()->id){
@echo它是if(auth()->user()->id!=$ticket->user\u id)
public function index()
{
// user() is a helper for Auth::user()
$tickets = user()->tickets()->open()->paginate(4);
return view('tickets.open-tickets', compact('tickets'));
}
public function show(Ticket $ticket)
{
// If the ticket does not belong to the logged in user, abort
if ($ticket->user_id != user()->id) {
abort(403, 'This is not your ticket');
}
return view('tickets.show', compact('ticket'));
}