我正在执行Laravel查询,以查询其关系大于0的元素列表。
演唱会:
| ID | NAME |
|----|-----------|
| 1 | Concert A |
| 2 | Concert B |
| 3 | Concert C |
还有排名表。
| ID | concert_id | user_id | Content |
|----|----------------|------------|----------|
| 1 | 1 | 1 | xxx |
| 2 | 1 | 2 | yyy |
| 3 | 3 | 1 | zzz |
| 4 | 3 | 2 | www |
| 5 | 1 | 3 | xyx |
| 6 | 3 | 3 | rer |
我需要做的查询是,获取音乐会在其内容中具有$some_query$
之类的值。
我的代码如下:
$result = $this->model->whereHas('positions')
->with(['positions' => function ($query) {
$query->where('content', 'like', "%{$content}%");
}])->get();
但是据我所知,这将带来所有音乐会,而且还将带来仅具有所需内容的职位。
所以我有两个问题,第一个是我需要让他的查询位置大于0的音乐会。 第二个是我还需要担任所有职务,而不仅仅是被查询的职务。 基本上,查询只是一种了解我需要带哪些音乐会的方式。
是否可以通过单个查询来实现?
答案 0 :(得分:0)
您必须将查询移至whereHas
。
如果我理解得很好,这就是您想要的:
$result = $this->model
// Take the Concerts that has positions with a similar content
->whereHas('positions', function ($query) use ($content) {
$query->where('content', 'like', "%{$content}%");
})
// Take (all) the Positions of these concerts
->with('positions')
->get();