这是一个非常奇怪的情况。我不知道这是我的理解上的问题还是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 = ?)
。
答案 0 :(得分: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总是有完美的解决方案!