所以我有結構化這樣的數據:Laravel查詢生成器的遞歸結果?例如。 ID,PARENT_ID
id|parent_id|name
1 |null |foo
2 |1 |bar
3 |2 |baz
所以基本上foo->bar->baz
。我難以理解如何使用laravel的查詢構建器獲取子行的行,然後是其祖先(直到parent_id == null
)。這可以用laravel完成嗎?我做了一些研究,Postgres有RECURSIVE
,而MySQL沒有(Postgres recursive query to update values of a field while traversing parent_id)。
我相信MySQL有類似的東西:How to do the Recursive SELECT query in MySQL?
但我怎麼在Laravel實現這個?
我的出發代碼基本上是使用查詢範圍,但我只是沒有得到它的權利:
Model::select('name')->getParent(3); //get baz and the ancestors of baz
protected function scopeGetParent($id) {
$parent = Model::where('id', '=', $id);
return $query->getParent($parent->parent_id);
}
期望的結果我想要的是:
name
baz
bar
foo
任何想法?
您不能使用每次調用數據庫時要求查詢一行的遞歸(php)函數嗎?當然有一個開銷,它可能不那麼幹淨,然後有你在查詢所有的內容,但你有沒有考慮它? – Gregory
我想我可以寫這樣的東西,但我想使用Laravel的超棒功能,並儘可能保持乾淨。 – tiffanyhwang
說實話,我不確定這是可能的(但?)。但是你對我感興趣......如果你碰巧找到任何東西,讓我們知道 – Gregory