将 Sql 查询转换为 Eloquent Laravel 5.6

Posted

技术标签:

【中文标题】将 Sql 查询转换为 Eloquent Laravel 5.6【英文标题】:Convert Sql query to Eloquent Laravel 5.6 【发布时间】:2018-05-02 20:56:29 【问题描述】:

我需要将此 SQL 转换为 Eloquent,因为我需要分页和检索集合,任何人都可以帮助我吗?

'SELECT n.id_norma, n.id_tipo_norma, n.texto_norma, n.fec_norma,r.cod_nodo, 
    r.articulo, t.desc_tipo_norma, n.desc_norma
    FROM normas n, rel_nodo_tem r, tipo_norma t
    WHERE r.id_norma = n.id_norma 
    AND r.id_tipo_norma = n.id_tipo_norma
    AND n.id_tipo_norma = t.id_tipo_norma 
    AND r.cod_nodo = :codNodo
    ORDER BY t.desc_tipo_norma ASC, n.fec_norma DESC, n.id_norma DESC'

我试过这个,但我没有正确的结果:

     $norms = Norm::join('rel_nodo_tem', 'rel_nodo_tem.id_norma', '=', 'normas.id_norma')
    ->where('rel_nodo_tem.id_tipo_norma', '=', 'normas.id_tipo_norma')
    ->where('rel_nodo_tem.cod_nodo', $codNodo)
    ->join('tipo_norma', 'normas.id_tipo_norma', '=', 'tipo_norma.id_tipo_norma')
    ->select('normas.id_norma','normas.id_tipo_norma','normas.texto_norma as text_norm','normas.fec_norma','normas.desc_norma', 'tipo_norma.desc_tipo_norma', 'rel_nodo_tem.cod_nodo', 'rel_nodo_tem.articulo')
    ->orderBy('tipo_norma.desc_tipo_norma', 'asc')
    ->orderBy('normas.fec_norma', 'desc')
    ->orderBy('normas.id_norma', 'desc')
    ->paginate(20);

【问题讨论】:

向我们展示原始查询和您尝试的结果的样本(限制为少于五个),以便我们找出问题。 我正在重新开发一个用 .asp 编写的旧大系统,我唯一需要比较的方法是与旧输出相比,在这种情况下,它们接收的规范比我做的和类型少我接受的规范不同。 【参考方案1】:

使用这个:

->whereColumn('rel_nodo_tem.id_tipo_norma', '=', 'normas.id_tipo_norma')

【讨论】:

谢谢!我会试一试,我会告诉你的 有效!多谢!但是这里的行为到底是什么? 你必须明确告诉 Laravel normas.id_tipo_norma 不是一个字符串值,而是一个列名。 我用一个更好的解决方案替换了我的答案。【参考方案2】:

试试这个查询:

 $norms = DB::table('normas')
        ->leftJoin('rel_nodo_tem','normas.id_norma','=','rel_nodo_tem.id_norma')
        ->leftJoin('tipo_norma', 'normas.id_tipo_norma', '=', 'tipo_norma.id_tipo_norma')
        ->where('rel_nodo_tem.id_tipo_norma', '=', 'normas.id_tipo_norma')
        ->where('rel_nodo_tem.cod_nodo', $codNodo)
        ->select('normas.id_norma','normas.id_tipo_norma','normas.texto_norma as text_norm','normas.fec_norma','normas.desc_norma', 'tipo_norma.desc_tipo_norma', 'rel_nodo_tem.cod_nodo', 'rel_nodo_tem.articulo')
        ->orderBy('tipo_norma.desc_tipo_norma', 'asc')
        ->orderBy('normas.fec_norma', 'desc')
        ->orderBy('normas.id_norma', 'desc')
        ->paginate(20);

【讨论】:

以上是关于将 Sql 查询转换为 Eloquent Laravel 5.6的主要内容,如果未能解决你的问题,请参考以下文章

将 Sql 查询转换为 Eloquent Laravel 5.6

将 SQL 查询转换为 Laravel Eloquent [关闭]

如何将复杂的 sql 查询转换为 laravel Eloquent

如何将此查询从SQL(mysql)转换为Eloquent(Laravel)

我想将 SQL 查询转换为 Laravel eloquent

SQL 查询到 Eloquent 的转换