繁体   English   中英

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

[英]In Laravel (5.3), how do I perform a loop through two separate DB tables and send the results into a view?

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

这就是我最终想要做的。

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

  • Onion Rings,它有一个指向 Appetizers 表的外键
  • Mozzarella Sticks,它有一个指向 Appetizers 表的外键
  • 汉堡包,它有一个指向 Sandwiches 表的外键

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

所以我的观点会显示:

开胃菜:
- 洋葱圈
- 奶酪棒

三明治:
- 汉堡包

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

有人能告诉我这里的最佳实践是什么,将我订购的数据纳入我的视野吗?




编辑/额外信息:

只是为了让大家知道我在哪里(我还在挣扎)。 这是我所有的代码。

首先,我设置了两个数据库表。 第一个称为“ 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

接下来,我有两个型号,FoodItemFoodCategory。

我的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'));
        }
    }

最后,我的视图(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)”

在这一点上我真的很难过。 任何人都可以对我缺少的东西有所了解吗? 谢谢!

您的问题可以通过使用关系来解决。 点击此链接了解更多信息

这个视频对我理解 laravel 中的关系有很大帮助。 希望对你也有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM