【问题标题】:Laravel returns wrong data for given idLaravel 返回给定 id 的错误数据
【发布时间】:2020-02-20 15:35:46
【问题描述】:

我有一个表products,其中有id = 1alias = 'some-alias' 的记录。

当我运行 Product::find(1) 时,我得到不正确的别名值:

{
  id: 1,
  alias: "another-alias",
}

DB::raw()DB::table() 查询也是如此。

如果我将别名从 some-alias 更改为 some-alias-1,然后将其更改回 some-alias,则查询返回正确的数据:

{
  id: 1,
  alias: "some-alias",
}

我使用 Laravel 5.8 和 Postgres 11.5。

【问题讨论】:

  • Postgresql 中有缓存层吗?

标签: laravel postgresql eloquent


【解决方案1】:

尝试使用这种语法:

Product::where('id', 1)->first();

Product::where('alias', 'some-alias')->first();

【讨论】:

  • 不,与 Product::where('id', 1)->first() 和 Product::whereId(1)->first() 的结果相同。看起来结果存储在某种缓冲区中。我最近使用 MySQL 并切换到 Postgres,到目前为止,我无法完全了解它的所有功能。
【解决方案2】:

告诉我,如果你不使用 laravel 发送请求,结果会一样吗?

我不确定,但可能是事务隔离级别的原因? https://www.postgresql.org/docs/9.5/transaction-iso.html

您的数据库具有哪个隔离级别?

【讨论】:

  • 是的,我直接登录到 Postgres docker 容器并在那里执行原始 sql 查询。结果相同。此外,在应用程序的某些部分,eloquent 返回相同Product::where('id', 1)->first() 的正确数据。我不知道隔离级别。一定要检查一下。
猜你喜欢
  • 2021-09-17
  • 2013-10-09
  • 1970-01-01
  • 2020-05-24
  • 2015-04-09
  • 1970-01-01
  • 2018-10-10
  • 2019-02-22
  • 1970-01-01
相关资源
最近更新 更多