Laravel - 查询

时间:2018-05-08 17:00:21

标签: php laravel

所以,我使用一种简单的方法来显示编辑表单,使用我从各种Laravel CRUD教程中看到的信息。

/**
 * Show the form for editing the specified resource.
 *
 * @param  \App\User  $users
 * @return \Illuminate\Http\Response
 */
public function edit(User $user)
{
    //Get user with specified username
    $user = User::findOrFail($user)->get();

    return view('users.edit', compact('user')); //pass user and roles data to view

}

正如您所看到的,这种方法不可能更简单。

此方法的路线如下:

/user/{user}/edit

其中{user}是绑定到路由的模型的主键,在我的情况下,这恰好是$username

所以,如果我要输入/user/stevew/edit,我希望查询如下:

select * from {用户{1}} {用户{1}} {deleted_at {1}}

  • ? = stevew

问题是:查询没有返回我期望的用户,而不是返回stevew的详细信息,我得到了另一个用户的详细信息:edwardl。

这是用户表迁移

where username = ? and

这是执行查询的转储

.

我知道第一个查询是登录用户,这是有意义的,第二个查询是我期望运行的查询,它甚至具有正确的用户名。

我无法看到它获取不同的用户名值。

2 个答案:

答案 0 :(得分:1)

由于评论中有点混乱,这就是我的意思

  

当您输入提示用户时,laravels di container将尝试解析此依赖关系并将用户模型的新实例传递给控制器​​

public function edit(User $user)
{
    print_r($user);
    // output is a new instance of an eloquent model
}

但您最想要的是URL中的用户名

public function edit(string $user)
{
    print_r($user);
    // output is the string from your route e.g. /user/Bob/edit -> output Bob
}

试试看,你会注意到差异=)

顺便说一句。如上所述,您仍然需要将查询更改为例如

User::where('username', $user)->first();

顺便说一句。我个人有时希望更明确地使用参数来避免混淆。例如/user/{username}/edit和控制器方法edit($username)。然后你会更像......"哦是啊..它的用户名,而不是整个用户对象" =)

答案 1 :(得分:0)

//Get user with specified username
$user = User::findOrFail($user)->get();

在laravel中,find / findOrFail指的是表的主要ID

如果不是id

,你应该使用什么
$user = User::where('username', $user)->first();

这样您就可以找到合适的用户

相关问题