Eloquent ORM有很多槽

Eloquent ORM hasManyTrough

我的数据库中有一个 hasManyTrough() 关系,但无法让它与 eloquent 一起工作。

我数据库中的关系

category(id)
entry(id)
category_entries(category_id, entry_id)

我有3个模型

Category
  has_many CategoryEntries

Entry
  has_many CategoryEntries

CategoryEntry
  belongs_to Category
  belongs_to Entry

所以每个类别都有很多条目,每个条目都有很多类别。

在 rails 我会做以下事情

Entry
  has_many CategoryEntries
  has_many Categories, through: :category_entries

我在 eloquent

中创建了以下内容
  CategoryEntry
    public function category(){
        return $this->belongsTo('App\Category');
    }
    public function entry(){
        return $this->belongsTo('App\Entry');
    }

  Category
    public function categoryEntries(){
        return $this->hasMany('App\CategoryEntry');
    }

  Entry
    public function categoryEntries(){
        return $this->hasMany('App\CategoryEntry');
    }


    public function categories()
    {
        return $this->hasManyThrough('App\Category', 'App\CategoryEntry', 'category_id', 'id');
    }

但这将创建以下 sql 命令:

select `entries`.*, `category_entries`.`category_id` from `entries` 
inner join `category_entries` on `category_entries`.`id` = `entries`.`entry_id`

这毫无意义。我的错误在哪里?

如您的问题所述,关系是

Category(有很多)Entry(有很多)CategoryEntries

所以我们可以在 Category 模型而不是 Entry 模型

中添加 hasManyThrough 关系
class Category
.......

public function categoryEntries()
{
    $this->hasManyThrough(App\CategoryEntry::class, App\Entry::class);
}

更新

如果该关系基于您提供的数据库,那么您在 CategoryEntry 之间存在多对多关系。那么你可以拥有,

class Entry
....

public function categories()
{
    return $this->belongsToMany(App\Category::class, 'category_entries');
}