这是一个非常奇怪的情况。我不知道我的理解或Laravel Eloquent ORM中的错误是否存在问题。但这是正在发生的事情。
我有一个名为users
的表,另一个名为user_metas
。一个表显然包含所有用户数据,另一个表(user_metas)有4列,如下所示。
现在,此表中有4条记录我想要获取特定用户。它们如下。
我分别在hasMany
和belongsTo
中定义了User.php
和UserMeta.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 = ?)
。
最后,我想通了!我唯一要做的就是将一个闭包传递给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始终拥有完美的解决方案!