0
我Laravel应用有三个型号查询具有一对多,尽管在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)
雄辩的假设在通道和子类别之间存在一对多并忽略数据透视表
我的问题是:
- 是否有解决方案使用雄辩?与中间的数据透视表有许多关系?
- 使用普通的MySQL,如何刚刚得到了所有的通道列表,但我不知道如何将它们分成不同的子类别。任何帮助?
编辑澄清:
我试图通过四个表在这里查询: 类别,子类别,CHANNEL_SUBCATEGORY和频道
我想要查找按子类别分组的类别中的频道。 (频道和子类别有多对多的关系)
我的频道表没有category_id,它也没有subcategory_id。因为是多对多的关系。我有一个channel_subcategory PIVOT表,其中有两个外键:subcategory_id和channel_id –
我编辑我的答案以反映这些信息 –