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'));
}