微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 如何使用Laravel创建数据库驱动的多级导航菜单

我是Laravel 4的新手,我对它的模型完全感到困惑.
我正在尝试为我的项目创建一个数据库驱动的导航菜单,我所知道的是我必须创建一个数据库交互的模型(基于我在codeigniter中的知识).我一直在研究很多,我已经厌倦了无法前进,这是我迄今为止提出的代码

/app/models/navigation.PHP

<?PHP

class Navigation extends Eloquent {

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'navigation';

    /**
     * Get the unique identifier for the menu item.
     *
     * @return mixed
     */
    public function getItemIdentifier()
    {
        return $this->getKey();
    }

}

这是我将用于此模型的导航数据库表:

解决方法:

因此,在进行了更多搜索和从不同来源阅读之后,这就是我想出来的并且工作正常:

/app/models/Navigation.PHP

<?PHP

class Navigation extends Eloquent {

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'navigation';

    public function parent() {

        return $this->hasOne('navigation', 'id', 'parent_id');

    }

    public function children() {

        return $this->hasMany('navigation', 'parent_id', 'id');

    }  

    public static function tree() {

        return static::with(implode('.', array_fill(0, 4, 'children')))->where('parent_id', '=', NULL)->get();

    }

}

/app/controllers/HomeController.PHP

<?PHP

class HomeController extends BaseController {

    protected $layout = "layouts.main";

    public function showWelcome()
    {

        $items = Navigation::tree();

        $this->layout->content = View::make('layouts.home.index')->withItems($items);

    }

}

/app/views/layouts/home/index.blade.PHP

<ul>
    @foreach($items as $item)
        <li>{{ $item->title }}
            @foreach($item['children'] as $child)
            <li>{{ $child->title }}</li>
            @endforeach
        </li>
    @endforeach
</ul>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐