gpt4 book ai didi

php - 为什么 Laravel 不返回特定用户的关系记录(它返回所有用户的记录)?

转载 作者:行者123 更新时间:2023-11-29 05:02:40 24 4
gpt4 key购买 nike

这是一个非常奇怪的情况。我不知道这是我的理解问题还是 Laravel Eloquent ORM 中的错误。但这是正在发生的事情。

我有一个名为 users 的表,另一个名为 user_metas。一个表显然包含所有用户数据,另一个表 (user_metas) 有 4 列,如下所示。

  • 编号
  • 用户编号
  • 姓名
  • 值(value)

现在,此表中有 4 条记录,我想获取 FOR A SPECIFIC USER。它们如下。

  • 名称 => 地区名称
  • 姓名 => 地区代码
  • 姓名 => 国家名称
  • 姓名 => 国家代码

我在 User.phpUserMeta.php 中分别定义了一个 hasManybelongsTo 关系。下面是我尝试从 user_metas 表中获取上述给定行的方法。

$user->meta()->where('name','like','region%')->orWhere('name','like','country%')->pluck('value','name');

问题是,即使我请求了特定用户的数据,它也会从整个该死的表中返回匹配 region%country% 的所有记录仅有的!它应该会自动过滤掉其他记录!

不知道怎么回事。也许我误解了这个功能或者 Eloquent ORM 出了什么问题。谁能在这里普及一下知识?

更新:使用toSql 函数,我发现它是直接使用条件而不是对它们进行分组。这意味着,条件是这样的 user_id = ?和名字=?或者 name = ? 而不是 user_id = ? AND(名称=?或名称=?)

最佳答案

我终于明白了!我唯一要做的就是将闭包传递给 where 函数并记下条件。这是我的旧代码和正在运行的新代码。

旧代码:

$user->meta()->where('name','like','region%')->orWhere('name','like','country%')->pluck('value','name');

新代码:

$user->meta()->where(function($q){
$q->where('name','like','country%')
->orWhere('name','like','region%');
})->pluck('value','name');

事情如我所愿! Laravel 总是有完美的解决方案!

关于php - 为什么 Laravel 不返回特定用户的关系记录(它返回所有用户的记录)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55085046/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com