繁体   English   中英

laravel has许多关系无法按预期工作

[英]laravel hasMany relationship not working as expected

我有两个模型,分别称为类别和子类别

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表中有一个名为category_id外键列

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

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

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

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

在您的控制器中

 $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-> $ category)

更多调整

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

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

暂无
暂无

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

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