繁体   English   中英

Laravel Eloquent高级查询

[英]Advanced query with Laravel Eloquent

我已经尝试了一段时间,以弄清楚如何使用Laravel Eloquent进行此查询。

查询:

DB::select('SELECT
    n.id,
    n.parent_id,
    n.name,
    n.file,
    n.created_at AS ts,
    f.mime,
    f.extension,
    IF(ch.id, 1, 0) AS dirs 
FROM nodes AS n 
LEFT JOIN nodes AS ch ON ch.parent_id=n.id
LEFT JOIN files AS f
    ON n.file = f.id
WHERE n.parent_id=?
GROUP BY n.id',array($path));

我有一个使用表nodes模型Node ,并且我的Node模型有一个方法nodefile() ,包括return $this->belongsTo('NodeFile'); 这是我需要加入的另一个模块。 NodeFile模块正在使用表files并且这两个files绑定在nodes.filefiles.id

这是我到目前为止所得到的:

Node::with(
    array('nodefile'=>function($query){
        $query->select('mime','extension');
    })
)->where('name','LIKE','%'.$q.'%')->get(array(
    'id', 'parent_id', 'name', 'file', 'created_at AS nts'
));

但是我仍然需要查询中的IF(ch.id,1,0) AS dirs 而且还没有完成自我加入。

任何人都知道如何以最佳方式做到这一点?

使用以下代码修复它。

Node::
  leftjoin('files','files.id','=','nodes.file')
->leftjoin('nodes AS ch','ch.parent_id','=','nodes.id')
->where('nodes.id','=',$path)
->groupBy('id')
->get(array(
    'nodes.id',
    'nodes.parent_id',
    'nodes.name',
    'nodes.file',
    'nodes.created_at AS nts',
    'files.mime',
    'files.extension',
    'ch.id AS dirs'
  ));

感谢@MarkBarker将其制作成原始的想法,这帮助我获得了此解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM