where() 方法是否具有与 whereRaw() 方法相同的功能?

Does where() method have the same power like whereRaw() method?

我有一个 Video 模型和一个 Tag 模型。假设我想获取所有带有标签的视频,也许是所有与标签有超过三个关系的视频。我会这样做:

Video::has('tags', '>=', 3)->get();

如果我想添加更多限制,例如获取至少包含 3 个标签的所有视频,标签名称应包含 'something'。我可以这样做:

Video::whereHas('tags' function(Builder $query){$query->where('name', 'like', '%something%');}, '>=', 3)->get();

但是如果我想做更多的事情怎么办,比如只计算 ID 为 odd/even 的标签。在闭包内使用类似 fmod('id', 2) 的东西。检查 id 是偶数还是奇数。 因为我不能做类似的事情: $query->where('id%2', '=', 0 );。好吧,在这种情况下,我知道我可以使用 $query->where('name', 'like', '%something%')->whereRaw('tags.id%2=0');。但是还有其他方法可以使用 where() 方法吗?

where() 第一个参数将始终是列,但如果您在 where()select() 等查询中指定列,则可以使用 DB::raw();这应该使这种语法可行,我认为这是 Eloquent ORM 的最佳解决方案。

->where(DB::raw('tags.id%2'), 0);