【问题标题】:Does where() method have the same power like whereRaw() method?where() 方法是否具有与 whereRaw() 方法相同的功能?
【发布时间】:2022-01-13 20:57:07
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 不确定您要寻找什么样的答案。显然没有whereEvenNumber 方法,所以你所拥有的就是你最好的选择。

标签: laravel eloquent


【解决方案1】:

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

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

【讨论】:

  • 这就是我的意思。基本上与whereRaw() 的想法相同,但我想使用where() 来做同样的事情。谢谢。
  • 很高兴你喜欢它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多