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

问题描述 投票:1回答:1

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

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

  • ID
  • 用户身份
  • 那么

现在,此表中有4条记录我想要获取特定用户。它们如下。

  • name => region_name
  • name => region_code
  • name => country_name
  • name => country_code

我分别在hasManybelongsTo中定义了User.phpUserMeta.php关系。这是我如何尝试从user_metas表中获取上面给出的行。

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

问题是,即使我只为特定用户请求了数据,它也会返回所有与region%country%匹配的记录。它应该自动过滤掉其他记录!

我不知道出了什么问题。也许我误解了Eloquent ORM的功能或其他东西。谁能在这里传播一些知识?

更新:使用toSql函数,我发现它直接使用条件而不是分组它们。这意味着,条件就像这个user_id = ? AND name = ? OR name = ?而不是user_id = ? AND (name = ? or name = ?)

php mysql laravel eloquent laravel-5.7
1个回答
3
投票

最后,我想通了!我唯一要做的就是将一个闭包传递给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始终拥有完美的解决方案!

© www.soinside.com 2019 - 2024. All rights reserved.