php - 如何获得具有 morphToMany 关系的第一个对象?

标签 php laravel

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

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

调用未定义的方法 App\Models\Category::addEagerConstraints()

我有这样的结果:

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

我要:

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

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

最佳答案

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

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

protected $appends = ['category_data'];

public function getCategoryDataAttribute()
{       
    return $this->categories->first();
} 

关于php - 如何获得具有 morphToMany 关系的第一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62713430/

相关文章:

php - 是否可以将 iOS 推送通知发送到两个不同的应用程序?

php - 建立一个一周的日历/时间表

php - Laravel - 使用 onclick 从复选框提交表单

php - Laravel 全局作用域和连接

php - 根据其他字段的值自动更新mysql字段

php - dompdf图像溢出问题

php - 使用 php 脚本进行 mysql 转储

javascript - 在 Vue JS 中显示表格内的图像以及基本 url (Laravel 5.2)

php - Laravel 表单输入不需要

php - 你如何获得 Laravel Storage 文件夹的路径?