我一直在努力寻找如何使用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));
我的模型Node
正在使用表格nodes
,我的nodefile()
模型有Node
方法,其中包括return $this->belongsTo('NodeFile');
模块我需要加入。 NodeFile
模块正在使用表格files
,这两个模块已绑定在nodes.file
和files.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
。并没有完成自我加入。
任何人都知道如何以最佳方式做到这一点?
答案 0 :(得分:0)
使用以下代码修复它。
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将其变为原始的想法,这有助于我找到这个解决方案。