【问题标题】:Why Eloquent Select as id returns zero "0"为什么 Eloquent Select as id 返回零“0”
【发布时间】:2019-11-22 09:41:44
【问题描述】:

对模型的 Laravel 5.8 Eloquent 查询,选择 field as id 为该字段返回 0

考虑一下这个雄辩的查询$users = User::select("SELECT email AS id", "name")->where('email', 'LIKE', '%gmail.com')->get(); $user->id; 是“0”!!

为什么?以及进行此类查询以使$user->id 成为此案例的用户电子邮件的正确方法是什么?

【问题讨论】:

  • 由于id 是一个整数列,Laravel 将值转换为整数。
  • @JonasStaudenmeir 那么如何防止转换为整数?
  • 您可以将$public incrementing = false; 放入您的User 模型中,但您不应该这样做。这打破了User::create($data)->id。我强烈建议您不要使用这种查询。如果您想返回 JSON 响应,请查看 API resources。为什么要“重命名”email 列?

标签: database laravel eloquent laravel-5.8


【解决方案1】:

你为什么用两次select

您可以这样做:

$users = User::select(['email AS id', 'name'])->where('email', 'LIKE', '%gmail.com')->get();

这将返回一个集合,因此迭代它您可以访问用户 ID,这将返回电子邮件。

【讨论】:

  • 我对我的项目进行了测试,它按预期工作。我不知道你是尝试过还是只是玩得很​​聪明。
  • @AllanDereal 编辑你的代码不会让你更聪明,我们可以在问题下方看到编辑的时间戳,如果你看不到,我在select 中使用array 以便选择列,我的代码返回一个集合,其 id 包含您所期望的电子邮件。
  • 您的解决方案有效。我意识到错误出现在我的查询中。谢谢
  • 错误出现在您的查询中,这就是您问我猜的问题的原因。 :) 那你就可以接受答案了。
【解决方案2】:

您似乎需要找到单行或只是一个用户,因此您必须使用->first() 而不是->get()

$user = User::select("SELECT email AS id, name")->where('email', 'LIKE', '%gmail.com')->first();

最后:$user->id

【讨论】:

  • 我认为你没有理解我的问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-20
  • 1970-01-01
  • 1970-01-01
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
  • 2012-11-12
相关资源
最近更新 更多