2014-02-06 135 views
1

我是相当新的锂PHP框架但我知道如何使用基本的数据库抽象方法。我正在使用一个插件来构建菜单树,它工作的很好,虽然我想使用Lithium的抽象层来实现这些功能。我被困在此:锂框架MySQL的原始查询

public function get_menuItems($menu_id) { 
    // retrieve the left and right value of the $root node 
    $result = $this->database->query("SELECT * FROM ".$this->tbl_menu_items." WHERE menu_id = '$menu_id'"); 
    if ($this->database->num_rows($result)) { 
    $right = array(); 
    $result = $this->database->query("SELECT node.title, node.type, node.class_name, node.content, node.id AS id, node.lft AS lft, node.rgt AS rgt, (COUNT(parent.title) - 1) AS depth FROM ".$this->tbl_menu_items." AS node CROSS JOIN ".$this->tbl_menu_items." AS parent WHERE node.menu_id = '$menu_id' AND parent.menu_id = '$menu_id' AND node.lft BETWEEN parent.lft AND parent.rgt GROUP BY node.id ORDER BY node.lft"); 
    $tree = array(); 
    while ($row = mysql_fetch_assoc($result)) { 
     $tree[] = $row; 
    } 
    } else { 
    $tree = false; 
    } 
    return $tree; 
} 

更是如此$result部分。我不知道锂是如何处理所有“AS”和什么的。我尝试了几种不同的方式来执行查询,但没有运气。

任何帮助将不胜感激,我希望我解释的不够好。

+0

这是一个模型方法? – Oerd

+0

这是由模型处理,是的。我不知道如何请求字符串来使用Lithium的抽象层。 – keithp

回答

0

如果你的PHP版本是5.4,你可以使用li3_tree behavior。看看它,因为它是一个很好的例子,说明如何实现这种递归行为。

此外,我强烈建议您看看"Using Models""Adding functionality to Lithium models",因为您的示例代码可能会受益匪浅。

+0

@keithp:我,如果我来过过强真的很抱歉,真的不是故意冒犯你,只是认为我花了一点时间把我的天,你指向一个解决方案......这就是说,我我喜欢找到一种非常礼貌的方式向你提供这些资源,但英语对我来说只是另一种外语,看起来我已经失去了一次良好的第一印象。 – Oerd

+0

你*可以*使用加入与锂,你只需要避开它的“基于阵列的”查询语法,并且仍然在进步文档。我会尽力在稍后的一个例子中,让我可以弥补:) – Oerd

+0

哦,现在我觉得自己像个混蛋。我以为你只是那些在互联网上寻找商机的机器人哈哈,我非常感谢你的帮助。因为我最近拔掉了一颗牙齿,所以我的心情也不好。无论如何,如果你最终编写了一个加入的例子,那太棒了!地狱,如果你甚至可以重写那个查询刺痛,我会以某种方式补偿你。 – keithp