laravel hasMany 关系未按预期工作

laravel hasMany relationship not working as expected

我有两个模型叫做 category 和 sub-category

Category.php

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

    public $timestamps = false;

    public function subCategory(){

        return $this->hasMany('App\Subcategory', 'category_id');
    }
}

Subcategory.php

class Subcategory extends Model
{
    protected $table = 'subcategory';

    public $timestamps = false;

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

我的 subcategory table 数据库

中有一个名为 category_id 的外键列

这就是我尝试在我的控制器中获取所选类别的所有子类别的方式

$subcategory = Category::all();

和我的 blade 观点

 <ul>
            @foreach($categories as $categories)
            <li class='has-sub'><a href='#'>{{ $categories->category_name }}</a>
                <ul>
                    @foreach($subcategory->subCategory() as $sub)
                        <li><a href='#'>{{ $sub->subcategory_name }}</a></li>
                    @endforeach
                </ul>
            </li>
            @endforeach

        </ul>

我现在可以获取所有类别的名称,但我无法获取 sub-categories 类别的名称。我在这里缺少什么?

你的模型很好,我会修改控制器并查看以下内容:

在您的控制器中

 $categories = Category::with('subCategory')->get();

现在在这种情况下,您的类别将急切地加载您的子类别。在您的示例中,您在 foreach 循环中进行查询,效率不高。

在您看来

<ul>
    @foreach($categories as $category)
    <li class='has-sub'><a href='#'>{{ $category->category_name }}</a>
        <ul>
        @foreach($category->subCategory as $sub)
            <li><a href='#'>{{ $sub->subcategory_name }}</a></li>
        @endforeach
        </ul>
    </li>
    @endforeach
</ul>

注意变量名,正如评论中提到的@aldrin27! ($类别 -> $类别)

更多调整

您可以为类别和子类别使用一个模型:

function subCategory() {
    return $this->hasMany('App\Category', 'category_id');
}