【发布时间】:2019-03-10 06:23:01
【问题描述】:
这是一个非常奇怪的情况。我不知道这是我的理解有问题还是 Laravel Eloquent ORM 中的错误。但这就是正在发生的事情。
我有一张名为users 的桌子和另一张名为user_metas 的桌子。一张表显然包含所有用户数据,另一张表(user_metas)有 4 列,如下所示。
- 身份证
- user_id
- 姓名
- 价值
现在,我要为特定用户获取此表中的 4 条记录。它们如下。
- name => region_name
- name => region_code
- name => 国家/地区名称
- name => country_code
我在User.php 和UserMeta.php 中分别定义了hasMany 和belongsTo 关系。这就是我尝试从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