所以我想尝试获得一个过滤标签方法,但在数据库部分是我迷路的地方,好吧,因为我写了一个有效的原始查询,但我需要Eloquent结果所以我可以玩来自模型类的关系。
所以这是原始查询:
$peticion = DB::select(DB::Raw("SELECT P.id, P.titulo, P.deadline, P.created_at, P.respuesta_id, U.usuario, C.titulo as categoria, C.clase_css as css, TG.Etiqueta
FROM peticiones P
JOIN usuarios U ON U.id = P.usuario_id
JOIN categorias C ON C.id = P.categoria_id
LEFT JOIN (
SELECT PT.peticion_id, T.nombre as Etiqueta
FROM tags T
JOIN peticion_tag PT ON PT.tag_id = T.id
) AS TG ON TG.peticion_id = P.id
JOIN (
SELECT PP.peticion_id
FROM (
SELECT PT.peticion_id, count(PT.peticion_id) AS conteo
FROM peticion_tag PT
WHERE PT.tag_id IN ( $etiquetas )
GROUP BY PT.peticion_id
) PP
WHERE PP.conteo = $len ) AS PPP
ON P.id = PPP.peticion_id
WHERE P.categoria_id = $id ;"));
它的作用是在按标签过滤时检索所有在其中包含太多标签的小工具。
但正如我所说,我需要雄辩,所以这是我尝试重新创建原始查询:
$pet = Peticion::whereHas('tags', function($q) use ($tags, $len){
$q->whereIn('tag_id', $tags);
})
->where('categoria_id', '=', $id)
->get();
但是它返回给我所有拥有此标签或此标签的小家伙,或者许多人使用
中的原始查询获得的$ tags数组WHERE PP.conteo = $len
但我不知道如何翻译成雄辩的。 希望有人可以帮助我,非常感谢。