【问题标题】:How to retrive data from database to a treeview using laravel如何使用 laravel 将数据从数据库检索到树视图
【发布时间】:2015-07-19 08:54:50
【问题描述】:

我的要求是使用数据库值构建树视图。

这是我的数据库表:

|    Categories   |  |sub_categories   |
|     id(pk)      |  |    id(pk)       |
|  cate_name      |  | sub_cat_name    |
| route_name      |  | route_name      |
                     |Categories_id(fk)|

我得到类别子类别以及与类别表相关的。

这是我的控制器代码:

$treeView = DB::table('categories')
                ->join('sub_categories', 'sub_categories.categories_id', '=', 'categories.id')
                ->get();

这是 *.blade.php 中的 HTML 结构:

@foreach($treeView as $tv)
                <li class="treeview">
                    <a href="#"><i class="fa fa-link"></i> <span>{{ $tv->category_name }}</span> <i
                                class="fa fa-angle-left pull-right"></i></a>
                    <ul class="treeview-menu">
                        <li class=""><a href="#">{{$tv->sub_category_name}}</a></li>
                        <li><a href="#">Update Article</a></li>
                    </ul>
                </li>
            @endforeach

但它不能正常工作。它一次又一次地给出相同的主要类别.. 任何人都可以建议一种正确的方法来检索数据吗?

【问题讨论】:

  • 你用的是eloquent吗?型号名称是什么?
  • no .. 我没有使用 eloquent... 我使用的是 Illuminate\Support\Facades\DB
  • 我有自己的数据库..所以我没有使用 Eloquent..
  • 嗯,不是不能两者兼得;)请过半天回来看看,如果到时候没人接,我在电脑前给个答案
  • K.. 谢谢.. 我期待很快收到您的来信...

标签: php laravel laravel-5 eloquent laravel-5.1


【解决方案1】:

我建议你使用 Eloquent,因为它可以让代码更简单,让你以后的生活更轻松。

为您的表创建模型类:

class Category extends Illuminate\Database\Eloquent\Model {
  protected $table = 'Categories';

  public function subcategories() {
    return $this->hasMany(Subcategory::class, 'Categories_id');
  }
}

class Subcategory extends Illuminate\Database\Eloquent\Model {
  protected $table = 'sub_categories';

  public function category() {
    return $this->belongsTo(Category::class, 'Categories_id');
  }
}

在你的控制器中获取这样的数据:

$treeView = Category::with(['subcategories'])->get();

然后在视图中:

@foreach($treeView as $category)
  <li class="treeview">
    <a href="#"><i class="fa fa-link"></i> <span>{{ $category->cate_name }}</span> <i class="fa fa-angle-left pull-right"></i></a>
    <ul class="treeview-menu">
      @foreach($category->subcategories as $subcategory)
        <li class=""><a href="#">{{$subcategory->sub_category_name}}</a></li>
      @endforeach
    </ul>
  </li>
@endforeach

我可以看到您的类别和子类别具有相同的结构。您可以考虑将它们存储在同一个表中,只需在表中添加一个 parent_id 字段并将其设置为 NULL 用于父类别和父 id 用于子类别。

【讨论】:

  • 感谢您的快速回复。我尝试使用您的代码示例。但它给了我错误 BadMethodCallException in Builder.php line 2003: Call to undefined method Illuminate\Database\Query\Builder::all()
  • 我在你提到的 app/ 目录中创建了 CategorySubcategory 类...
  • 我想检查该类别是否有子类别,否则做另一项工作。我尝试如下。但它没有检索到所需的答案..有什么问题吗??
  • @foreach($treeView as $category) @if($category-&gt;has('subcategories')) &lt;li class="treeview"&gt; &lt;a href="#"&gt;&lt;i class="fa fa-link"&gt;&lt;/i&gt; &lt;span&gt;{{ $category-&gt;category_name }}&lt;/span&gt; &lt;i class="fa fa-angle-left pull-right"&gt;&lt;/i&gt;&lt;/a&gt; &lt;ul class="treeview-menu"&gt; @foreach($category-&gt;subcategories as $subcategory) &lt;li class=""&gt;&lt;a href="#"&gt;{{$subcategory-&gt;sub_category_name}}&lt;/a&gt;&lt;/li&gt; @endforeach &lt;/ul&gt; &lt;/li&gt; @else &lt;li&gt;&lt;a href="#"&gt;&lt;i class="fa fa-link"&gt;&lt;/i&gt; &lt;span&gt;{{$category-&gt;category_name }}&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; @endif @endforeach
  • 你从哪里得到这个 has() 的想法?无论如何,请参阅stackoverflow.com/questions/31509536/…中的答案
猜你喜欢
  • 2019-11-10
  • 2020-06-26
  • 1970-01-01
  • 2017-07-31
  • 2013-05-15
  • 2019-05-30
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多