【问题标题】:Getting an error trying to use relationships in Laravel 5.3尝试在 Laravel 5.3 中使用关系时出错
【发布时间】:2017-02-05 23:35:50
【问题描述】:

想弄清楚这一点我快疯了。我发誓似乎我已经正确设置了所有内容 - 但我一生都无法在没有错误的情况下加载我的视图。

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

在这一点上我真的很难过。有人可以解释一下我所缺少的吗?谢谢!

【问题讨论】:

  • 您只需要验证每个foodItem 都有一个与之关联的foodCategory。检查数据库中的这些记录。您收到错误消息,因为至少有一个 foodItem 没有 foodCategory
  • @linuxartisan 我检查了我的数据库,我的 foodItem 表中的所有记录都有一个有效的 category_id。我的 foodItem 表中只有 3 个项目,并且它们只能包含两个可能的类别。我什至在我的视图中运行了以下代码: foreach ($food_items as $food)
  • {{ $food->category_id }}
  • endforeach 它正确显示了 3 个列表项,所有项都具有有效的 category_id。所以 - 回到被难倒:-(

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


【解决方案1】:

试试这个

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

反之

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

这是因为你没有使用常规的category_id

【讨论】:

  • 我试了一下,但仍然收到以下错误。 “试图获取非对象的属性(查看:/Applications/XAMPP/xamppfiles/htdocs/Laravel/ChanceSystems2017/resources/views/food.blade.php)”将修改我的两个数据库表以使用“category_id”而不是uniqueID & categoryID 解决这个问题?
  • 使用category_id 只是一个约定。但这可能会有所帮助。你的表名是什么?尝试像这样将它们添加到您的模型中:protected $table = 'foodCategories';
猜你喜欢
相关资源
最近更新 更多
热门标签