【发布时间】:2017-11-13 16:56:42
【问题描述】:
我的 Laravel 应用程序有三个模型
- 类别
- 子类别
- 频道
类别 - 子类别(一个类别有多个子类别) 子类别 - 渠道(多对多关系)
我有以下关系:
class Category extends Model
{
public function subcategories()
{
return $this->hasMany('App\Subcategory');
}
public function channels()
{
return $this->hasManyThrough('App\Channel','App\Subcategory');
}
}
class Subcategory extends Model
{
public function Category()
{
return $this->belongsTo('App\Category');
}
public function channels()
{
return $this->belongsToMany(Channel::class, 'channel_subcategory', 'channel_id', 'subcategory_id')
->withTimestamps();
}
}
class Channel extends Model
{
public function subcategories()
{
return $this->belongsToMany(Subcategory::class, 'channel_subcategory', 'channel_id', 'subcategory_id')->withTimestamps();
}
}
我有 4 张桌子:
- 类别
- 子类别
- channel_subcategory
- 频道
我想查询一个类别中的所有频道,按子类别组织。比如:
Category A
Subcategory A-1
Channel A-1-1
Channel A-1-2
Subcategory A-2
Channel A-2-1
Channel A-2-2
鉴于 Category.slug 我在类别控制器中进行了以下查询:
public function show($slug)
{
$category = Category::with('subcategories')->where('categories.slug', '=', $slug)->first();
$channels = $category->channels;
return view('categories.show')->withCategory($category)->withChannels($channels);
}
我收到一条错误消息:
PDOException in Connection.php line 319:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'channels.subcategory_id' in 'on clause'
(SQL: select `channels`.*, `subcategories`.`category_id`
from `channels`
inner join `subcategories` on `subcategories`.`id` = `channels`.`subcategory_id` where `subcategories`.`category_id` = 1)
Eloquent 假设渠道和子类别之间存在一对多,并忽略了数据透视表
我的问题是:
- 是否有使用 Eloquent 的解决方案?中间有数据透视表的多层次关系?
- 使用普通的 MySQL,如何将频道列表全部放在一起,但我不知道如何将它们分成子类别组。有什么帮助吗?
编辑澄清:
我在这里尝试通过四个表进行查询: 类别、子类别、CHANNEL_SUBCATEGORY 和频道
我想在按子类别分组的类别中查找频道。 (渠道和子类别是多对多的关系)
【问题讨论】:
标签: laravel has-many-through querying