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 –
我編輯我的答案以反映這些信息 –