将 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')
【讨论】:
谢谢!我会试一试,我会告诉你的 有效!多谢!但是这里的行为到底是什么? 你必须明确告诉 Laravelnormas.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)