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);
我有一个 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);