【问题标题】:Get Authenticatable Users from database in Laravel从 Laravel 的数据库中获取可验证的用户
【发布时间】:2017-04-27 09:10:41
【问题描述】:

在我的 Laravel 项目中,默认用户扩展如下:

class User extends Authenticatable{
  use Notifiable;

  protected $fillable = [
      'id','name', 'email', 'password','type',
  ];

  protected $hidden = [
      'password', 'remember_token',
  ];
}

当我试图让所有注册用户都使用它时,

$user = User::all();
return $user;

[{"id":0,"name":"sdfsd","email":"sdsdc@fdcs.gfhf","type":"a","created_at":"2016-12-11 19 :44:39","updated_at":"2016-12-11 19:44:39"},{"id":0,"name":"dcsdc","email":"dsd@dscsdc.lll" ,"type":"a","created_at":"2016-12-12 12:14:42","updated_at":"2016-12-12 12:14:42"}]

我得到了所有用户,但没有他们的用户 ID。ID 为“0”。

当我尝试使用“where”约束时,它会给出异常。

那么我可以将 User 用作 Eloquent 模型吗?如何在 Laravel 中检索用户表信息?

【问题讨论】:

  • 你得到什么样的异常?
  • 提供正确/完整的旅行代码
  • 已编辑。我在使用User::all() 时得到了上述结果,但 id 显示为 0。我检查了 db,但它们不是 0。使用 User::where('id', "NPC0001") 时出现错误提示“helpers.php 第 519 行中的 ErrorException:htmlspecialchars() 需要参数 1是字符串'
  • “id”列不应该在您的可填充数组中,这是一个安全风险。
  • ID 不是自动增量 ID。我已将其更改为字符串。在我的应用中,用户必须提供它。

标签: php laravel eloquent


【解决方案1】:

Illuminate\Database\Eloquent\Model.php 路径文件中找到public $incrementing = true; 并使用false 更新并检查。

您可以从Eloquent Model Conventions 获得有关相同的更多详细信息 希望这能解决您的问题

【讨论】:

  • 谢谢。它适用于吸引所有用户。我也可以在其中使用 where 吗..?
  • 你可以在你的模型中使用它来表达自己的雄辩。
  • 很高兴为您提供帮助!
【解决方案2】:

您必须在模型上将 $incrementing 设置为 false。

public $incrementing = false;

Eloquent 假设主键是一个递增的整数值,这意味着默认情况下主键会自动转换为 int

如果您希望使用非递增或非数字主键,您必须将模型上的公共 $incrementing 属性设置为 false

Docs

【讨论】:

  • 感谢您的解释。我认为这对我有帮助
猜你喜欢
  • 2018-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
  • 2017-07-16
相关资源
最近更新 更多