laravel有很多关系没有按预期工作

时间:2015-09-02 08:32:29

标签: php laravel-5 eloquent relationship

我有两个名为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');
    }

我在数据库

中的category_id表中有一个名为subcategory的外键列

这就是我试图获取控制器中所选类别的所有子类别的方法

$subcategory = Category::all();

和我的刀片视图

 <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>

我现在能够获得所有类别名称,但我无法获得该类别的子类别名称。我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

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

在您的控制器中

 $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! ($ categories - &gt; $ category)

更多调整

您可以将一个模型用于类别和子类别:

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