【问题标题】:Laravel: Cannot get parent of a categoryLaravel:无法获取类别的父级
【发布时间】:2017-10-01 11:47:13
【问题描述】:

我在一个分类广告平台上工作,但我遇到了一个关系问题。虽然我认为我已经正确设置了所有内容,但仍然存在这个问题。

场景是这样的: 我有一个模型 Category (App\Category) 具有以下关系以形成子类别

class Category extends Model
{
    public function parent() {
        return $this->belongsTo('App\Category', 'parent_id');
    }

    public function children() {
        return $this->hasMany('App\Category', 'parent_id');
    }

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

}

我还有一个模型广告(App\Advert),关系如下

class Advert extends Model
{

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

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

}

最后我有一个模型 User (App\Advert) 具有以下关系

class User extends Authenticatable
{
    public function adverts() {
        return $this->hasMany('App\Advert');
    }
}

我正在像这样的控制器内的集合中收集广告

$adverts = $user->adverts()->with('category')->with('category.parent')->get();

我面临的问题是当我尝试输出广告和它们所属的类别以及我遇到此问题的相应子类别时

Trying to get property of non-object (View: 
..\resources\views\user\profile.blade.php)

在下一行

$ad->category->parent->name . ' / ' . $ad->category->name

当我 dd 集合时,我可以看到所有广告和关系以及类别和子类别......但是当我尝试像这样输出它时,我得到了这个错误 尝试获取非属性对象

帮助任何人? 谢谢

【问题讨论】:

  • 嗯,这似乎是您正在收集一个集合,或者您必须确保用户有一个类别,这意味着您可能有没有任何广告的用户。尝试迭代刀片中的 $ad。顺便说一句,您可以使用 $adverts = $user->adverts()->with('category','category.parent')->get();
  • 您的广告似乎没有类别或没有父类别的广告。对于语法,您可以只使用->with('category.parent'),这也会加载类别。您还可以查看whereHas 以确保您只获取具有类别的广告或使用with('category', function()...
  • 您的所有类别都有父级吗?如果没有,那就是问题所在。在这种情况下,您首先必须检查该类别是否有父类别,然后显示它的名称。
  • 你确定你有一个模型数组,否则你必须访问像 $data["your_value"]; 这样的数据或类似的东西。试试 $ad->category->parent[0]->name 或 $ad->category->parent[0]["name"] 可能吗?
  • 啊...这是一个初学者的错误...我没有注意到并非所有类别都有父母...我的坏人...尽管感谢您的帮助

标签: php laravel model eloquent relation


【解决方案1】:

我不确定这是否有帮助,但我将其发布为答案以使代码更具可读性,仅此而已。不期待任何学分;)

在我的一个模型中,我设置了这样的孩子/父母关系:

/**
 * Get the Categories associated with the parent's `id`
 */
public function children()
{
    return $this->hasMany('App\Category', 'parent_id', 'id');
}

/**
 * Get the parent associated with the Category`s parent_id`
 */
public function parent()
{
    return $this->belongsTo('App\Category');
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    相关资源
    最近更新 更多