在Laravel 5上授权后如何修改默认sql?

在Laravel 5上授权后如何修改默认sql?,laravel,laravel-5,Laravel,Laravel 5,如果您仔细查看我的Laravel 5项目上的图片,我已成功授权,我的Laravel调试栏显示默认sql,如下所示: SELECT * FROM users WHERE users.id = 2 Limit 1 我正在寻找成功授权后修改此sql的方法,如下所示: SELECT u.*, c.companyName FROM users u LEFT JOIN companies c ON c.id = u.companyId WHERE u.id = ? LIMIT 1 这

如果您仔细查看我的Laravel 5项目上的图片,我已成功授权,我的Laravel调试栏显示默认sql,如下所示:

SELECT * FROM users WHERE users.id = 2 Limit 1
我正在寻找成功授权后修改此sql的方法,如下所示:

SELECT
  u.*, c.companyName
FROM
  users u
LEFT JOIN companies c
  ON c.id = u.companyId
WHERE
  u.id = ?
  LIMIT 1

这里有两个选项。扩展身份验证驱动程序并修改
retrieveById
方法以返回您的公司名称和用户详细信息,或者与
公司
模型建立关系,我猜这是一对多,一个公司可以有多个用户,而一个用户可以属于一个公司。我会选择后者,在这种情况下更有意义

您可以通过运行以下命令创建
公司
模型:

php工匠制造:模型公司
然后,您可以将其添加到身份验证系统附带的
用户
模型中:

公共职能公司()
{
返回$this->belongsTo('App\Company','companyId');
}
现在,您可以执行以下操作来访问经过身份验证的用户的公司详细信息:

Auth::user()->company->companyName;
这是因为当您调用
Auth::user()->company
时,您会得到附加到用户的
company
的实例


您可以在Laravel文档中阅读更多关于Elount和的信息。

这是Laravel Auth系统的查询提交吗?这意味着您正在使用
Auth::user
获取经过身份验证的用户详细信息。@Bogdan,是的,此查询来自Laravel Auth系统。因此,我想使用以下内容显示公司名称:
Auth::user()->companyName
是否设置了关系?@lagbox No。我使用迁移构建了表(
users
companys
)。我是拉威尔的新手,非常感谢。我选择了第二个选项,这正是解决问题的好方法。我不知道雄辩的奥姆格拉德能帮上忙。如果您是Laravel的新手,我建议您阅读整个文档,如果您有时间的话,因为它可以让您对框架提供的功能有一个很好的了解。是否可以使用左连接合并这两个查询?不幸的是,在这种情况下不可以,因为初始查询是由身份验证系统生成的,这意味着除非扩展身份验证驱动程序(这是我建议的第一个选项),否则无法访问它。但是,如果这是一个性能问题,我不会太担心每个请求一个简单的额外查询,因为根据我的经验,这不是瓶颈发生的地方,所以我建议您仅在需要时进行优化。