【问题标题】:laravel hasMany relationship not working as expectedlaravel hasMany 关系没有按预期工作
【发布时间】:2015-09-02 08:32:29
【问题描述】:

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

Category.php

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

    public $timestamps = false;

    public function subCategory(){

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

子类别.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 as $categories 将其更改为 categories as $category
  • @aldrin27 我成功获得父类别,我只是在获得该类别的子类别时遇到问题
  • 你能print_r($categories)吗?
  • 我在做print_r得到id的名字和类别的名字

标签: php laravel-5 eloquent relationship


【解决方案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 -> $category)

更多调整

您可以对类别和子类别使用一种模型:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多