【问题标题】:How to get the first object with morphToMany relation?如何获得具有 morphToMany 关系的第一个对象?
【发布时间】:2020-10-24 01:28:21
【问题描述】:

我的项目表上有一个多态关系

public function categories(): MorphToMany
{
    return $this->morphToMany(Category::class, 'categorizable', 'categorizables', 'categorizable_id', 'category_id')
        ->withTimestamps();
}

它有效。我得到了预期的对象列表。只是,我数据库中的某些模型总是只有一个类别。

我想避免获取项目列表。我想要直接的对象。

我试过了,但它不起作用:

public function category()
{
    return $this->morphToMany(Category::class, 'categorizable', 'categorizables', 'categorizable_id', 'category_id')->first;
}

Call to undefined method App\Models\Category::addEagerConstraints()

我有这样的结果:

{
  'id': 1,
  'name': 'My name',
  'categories': [
    {my object category}
   ]
}

我想要:

{
  'id': 1,
  'name': 'My name',
  'category': 
    {my object category}
}

我该怎么做?这是多对多的多态关系。

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    morphToMany 类似于 HasMany() 总是返回一个数组。

    您可以使用 Eloquent Accessor 获取类别并操作数据。

    protected $appends = ['category_data'];
    
    public function getCategoryDataAttribute()
    {       
        return $this->categories->first();
    } 
    

    【讨论】:

      猜你喜欢
      • 2018-03-14
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      • 2021-04-05
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      相关资源
      最近更新 更多