我有一个带有标识符数组的用户模型。标识符可以是IP地址或其他名称。可以禁止用户,这是通过其标识符来完成的。但是,我似乎无法使用Eloquent的HasMany关系来完成这种逻辑。
我想要的是,只要存在一个禁令模型(条目),其中标识符与用户标识符数组中的标识符之一匹配,则应将其添加到hasMany关系中。
我尝试将“ HasMany”与“ whereIn”一起使用,但这没有用,因为它仍然会查找外键关系,然后应用“ whereIn”约束。这不是我想要的。
这是我尝试使用禁令定义用户关系的方式。
public function bans()
{
// Due to how banning works, there might exist a ban record for
// each of the player's identifier (steam, IP address
// rockstar license, etc.), and it's essential to get all.
// All ban records where the identifier column equals one of
// the user's identifiers (array)
return $this->hasMany(Ban::class)->whereIn('identifier', $this->identifiers);
}
可以预期的是,它应该返回所有禁止记录,这些记录在其标识符列中具有用户的标识符之一。但这不起作用,因为HasMany仍会应用外键相等性检查。
谢谢!
答案 0 :(得分:0)
我认为适当的解决方案是使用whereHas。您可以使用此功能执行更高级和更强大的查询。
https://laravel.com/docs/5.8/eloquent-relationships
use Illuminate\Database\Eloquent\Builder;
// Retrieve posts with at least one comment containing words like foo%...
$posts = App\Post::whereHas('comments', function ($query) {
$query->where('content', 'like', 'foo%');
})->get();
// Retrieve posts with at least ten comments containing words like foo%...
$posts = App\Post::whereHas('comments', function ($query) {
$query->where('content', 'like', 'foo%');
}, '>=', 10)->get();