访问模型关系时遇到问题雄辩的Laravel 5.8模型

时间:2019-03-20 23:38:03

标签: php laravel

我是Laravel的早期开发人员(学习),在处理Eloquent模型之间的关系时遇到了一些麻烦。我将不胜感激。

创建一个包含大量食谱的网站,我目前正在根据类别(早餐,午餐,晚餐等)分离不同的视图。在视图中,每个配方都可以显示配方标题和配方创建者。我有一个用户模型,配方模型和类别模型。在我的breakfast.blade.php视图中,我试图在@if语句中访问$ recipe-> category-> name以便整理相关配方。它引发了一个错误,并说“此集合实例上不存在属性[类别]”。 我在控制器,视图和模型中获得的代码如下:

食谱模型

namespace App;

use Illuminate\Database\Eloquent\Model;

class Recipe extends Model
{
//Table Name
protected $table = 'recipes';
// Primary Key
public $primaryKey = 'id';
// Timestamps
public $timestamps = true;

public function user(){
    return $this->belongsTo('App\User', 'id');
}

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

类别模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
protected $table = 'categories';

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

CategoryController的顶部

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Recipe;
use App\Category;
use App\User;
use App\Auth;

class CategoryController extends Controller
{
public function showBreakfast(){
    $recipes = Recipe::all();
    $users = User::all();
    return view('recipes.categories.breakfast')->with('recipes', 
 $recipes);
}

我的@if语句和@foreach循环的开头(这是引发错误的地方)

@section('content')
<section>
<div class="container">
<div class="row">
@if(count($recipes) > 0 && $recipes->category->name == 'Breakfast') 
@foreach($recipes as $recipe) 

我将非常感谢您的帮助!我一直在弄乱控制器,雄辩的模型,并把变量传递给视图,有时我可以使它工作,有时却不行。我似乎不太了解如何有效使用此规则的基本规则。再次感谢您的帮助! :)让我知道是否需要澄清这个问题!

1 个答案:

答案 0 :(得分:0)

使用all()方法时,您将从该模型接收整个集合。 $recipes变量是对象(配方)的数组,而不仅仅是一个对象(配方),因此您应该使用foreach来访问每个配方的类别名称:

@if(count($recipes) > 0)
    @foreach($recipes as $recipe) 
        @if($recipe->category->name == 'Breakfast') 
        // do something
        @endif
    @endforeach
@endif

您的关系有误

public function user(){
    return $this->belongsTo('App\User', 'user_id');
}

public function category(){
    return $this->belongsTo('App\Category', 'category_id');
}

您应该将外键作为第二个参数而不是id。

此外,您忘记提及哪些属性是可填充的:

$fillable = ['name',...

]