如何在Laravel中将Fluent翻译成Eloquent

时间:2015-04-18 00:52:07

标签: mysql laravel eloquent fluent

所以我想尝试获得一个过滤标签方法,但在数据库部分是我迷路的地方,好吧,因为我写了一个有效的原始查询,但我需要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

但我不知道如何翻译成雄辩的。 希望有人可以帮助我,非常感谢。

0 个答案:

没有答案