Laravel 带有用户和授权的查询生成器

Laravel query builder with the User and Auth

如何在我的数据库中列出来自 table(议程)的所有行,其中记录由连接的 user.I 使用来自 Laravel.[=12 的默认身份验证保存=]

public function index ($id = null)

    {
        $agendas = Agenda::where('id', Auth::user()->id)->get();
        $users = User::all();
        return view('admin.agendas.index', compact('agendas','users','id'));
    }

我的控制器在这里。 需要帮助

假设

  • 议程 table(包含议程模型的记录)有一列 user_id,它引用了用户 table
  • id
  • 用户有很多日程
  • 议程属于用户

class User extends Model
{
    public function agendas()
    {
        return $this->hasMany(Agenda::class);
    }

    //... rest of class code
}


class Agenda extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class);
    }

    //... rest of class code
}


public function index($id = null)
{

    $user = User::with('agendas')->findOrFail(auth()->id());

    return view('admin.agendas.index', [
        'user' => $user,
        'agendas' => $user->agendas,
        'id' => $id
    ]);
}

您的 User 模型应该有一个关系:

public function agendas()
{
    return $this->hasMany(Agenda::class);
}

在您的控制器中,您可以这样简化使用:

public function index (Request $request, $id = null)
{
    $agendas = $request->user()->agendas;
    $users = User::all();
    return view('admin.agendas.index', compact('agendas','users','id'));
}

如果您想获得与另一个数据相关的数据,您必须通过字段将这些 table 连接在一起。在这种情况下,我猜你在 Agenda table 中有一个名为 'user_id'.

的专栏

你有两种方式:

  1. 在您的模型中加入 tables。
  2. 在您的控制器中的议程 table 中搜索

如果您想使用来自模型的 tables 加入:

// in App\User.php
...
class User ...{
...

    public function Agenda(){
        return $this->hasMany(Agenda::class);
    }
...
}
...

然后您就可以像这样从任何地方访问所有“议程”: Auth()->user()->agenda

如果你想从你的控制器中搜索 table,你可以这样做: Agenda::where('id', Auth::user()->id)

您可以阅读更多关于 eloquent-关系的信息:https://laravel.com/docs/8.x/eloquent-relationships