【问题标题】:How to modify default sql after authorization on Laravel 5?Laravel 5授权后如何修改默认sql?
【发布时间】:2015-11-16 03:40:54
【问题描述】:

如果您查看图片,您可以在我的 Laravel 5 项目中看到我已成功授权,并且我的 Laravel DebugBar 在下面显示默认 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 Auth 系统?这意味着您正在使用Auth::user 来获取经过身份验证的用户详细信息。
  • @Bogdan,是的,这个查询来自 Laravel Auth 系统。所以我想用这个来显示公司名称:Auth::user()->companyName
  • 建立关系了吗?
  • @lagbox 否。我已经使用迁移构建了表(userscompanies)。我是 Laravel 的新手。

标签: laravel laravel-5


【解决方案1】:

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

您可以通过运行创建Company 模型:

php artisan make:model Company

然后你可以将这个添加到认证系统自带的User模型中:

public function company()
{
    return $this->belongsTo('App\Company', 'companyId');
}

现在您可以执行以下操作来访问经过身份验证的用户的公司详细信息:

Auth::user()->company->companyName;

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

你可以在 Laravel 文档中阅读更多关于 Eloquent ModelsRelationships 的内容。

【讨论】:

  • 非常感谢。我选择了第二个选项,这正是解决问题的好方法。我不知道 Eloquent ORM
  • 很高兴能提供帮助。如果你是 Laravel 的新手,我建议你阅读 Quickstart Help Section,如果你有时间,可以阅读整个文档,因为它可以让你很好地了解框架可以提供什么。
  • 是否可以使用左连接合并这两个查询?
  • 不幸的是,在这种情况下没有,因为初始查询是由身份验证系统构建的,这意味着您无权访问它,除非您扩展身份验证驱动程序(这是我建议的第一个选项) .但如果这是一个性能问题,我不会太担心每个请求一个简单的额外查询,因为根据我的经验,这不是发生瓶颈的地方,所以我建议您仅在需要时/在需要时进行优化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-29
  • 2015-05-14
  • 2019-03-13
  • 2015-06-13
  • 2017-08-14
  • 2015-05-24
  • 1970-01-01
相关资源
最近更新 更多