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);
}
更新
如果该关系基于您提供的数据库,那么您在 Category
和 Entry
之间存在多对多关系。那么你可以拥有,
class Entry
....
public function categories()
{
return $this->belongsToMany(App\Category::class, 'category_entries');
}
我的数据库中有一个 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);
}
更新
如果该关系基于您提供的数据库,那么您在 Category
和 Entry
之间存在多对多关系。那么你可以拥有,
class Entry
....
public function categories()
{
return $this->belongsToMany(App\Category::class, 'category_entries');
}