在Laravel(5.3)中,如何通过两个单独的数据库表执行循环并将结果发送到视图中?

时间:2017-02-05 00:01:59

标签: php laravel model-view-controller laravel-5.3

我对Laravel非常陌生,所以如果这是一个愚蠢的问题,请耐心等待。

这是我最终要做的事情。

我有两个数据库表:Categories和FoodItems。让我们说,为了简单起见,我在Categories表中有两个类别(开胃菜和三明治),我在FoodItems表中有3个项目:

  • 洋葱圈,其外键指向开胃菜表
  • Mozzarella Sticks,其外键指向Appetizers表
  • 汉堡包含指向三明治表的外键

我有一个视图,我想首先显示所有类别,然后显示该类别中的所有项目。

所以我的观点会显示:

开胃:
- 洋葱圈
- Mozzarella Sticks

三明治:
- 汉堡包

我无法弄清楚如何遍历这两个表,执行嵌套的数据库调用,然后将此结构发送到我的视图中,而不在视图中实际执行任何逻辑。

有人可以告诉我这里的最佳做法是什么,把我订购的数据放到我的视野中?




编辑/额外信息:

只是为了让每个人都知道我在哪里(我仍在努力)。这是我的所有代码。

首先,我设置了两个数据库表。第一个叫做“ foodItems ”,第二个叫做“ foodCategories ”。

foodItems 表格包含以下列:
id,uniqueID,categoryID,clientID,itemName,itemDescription,itemAlias,thumbURL,itemSize,itemCost,itemPrice,isTaxable,hasSizes,hasDescriptors,status,created_at,updated_at

foodCategories 表格包含以下列:
id,uniqueID,clientID,categoryName,categoryAlias,status,created_at,updated_at

接下来,我有两个模型, FoodItem FoodCategory

我的 FoodItem 模型中的代码如下所示:         

    namespace App;

    use Illuminate\Database\Eloquent\Model;

     class FoodItem extends Model {
            protected $table = 'foodItems';

          public function foodCategory(){
                 return $this->belongsTo('App\FoodCategory');
            }
     }

我的 FoodCategory 模型中的代码如下所示:

<?php
    namespace App;

    use Illuminate\Database\Eloquent\Model;

    class FoodCategory extends Model {
        protected $table = 'foodCategories';

        public function foodItem() {
                return $this->hasMany('App\FoodItem');
        }
    }

我的控制器中的代码如下所示:

<?php
    namespace App\Http\Controllers;

    use Illuminate\Support\Facades\Auth;
    use Illuminate\Support\Facades\DB;
    use Illuminate\Http\Request;
    use App\FoodCategory;
    use App\FoodItem;

    class DashboardController extends Controller {

        public function __construct(){
            $this->middleware('auth');
        }

        public function food() {
            $food_items = FoodItem::orderBy('categoryID')->get();
            return view('food', compact('food_items'));
        }
    }

最后,我在View(food.blade.php)中的代码是:

@foreach ($food_items as $food)
    <li>{{ $food->foodCategory->categoryName }}</li>
@endforeach

在我看来,我尝试在“ foodCategory ”之后使用括号,我尝试将名称更改为“FoodCategory”,“FoodCategory()”,“foodCategories()”,“foodCategories” ......以及我能想到的其他所有组合 - 但似乎没有任何效果。

由于代码现在,它会产生以下错误:

“试图获取非对象的属性(查看:/Applications/XAMPP/xamppfiles/htdocs/Laravel/ChanceSystems2017/resources/views/food.blade.php)”

我真的很难过。请问有人可以了解我所缺少的内容吗?谢谢!

1 个答案:

答案 0 :(得分:1)

您的问题可以通过使用关系来解决。请按照此link获取更多信息

video帮助我理解了laravel中的关系。希望它也能帮到你。