1
我想弄清楚Eloquent是如何工作的以及使用普通sql查詢的優點(在columA.id = columnB.id上連接A和B表... )Laravel>使用雄辯查詢多對多關係
我有兩個型號:頻道和子類別的許多一對多的關係
我創建了一個channel_subcategory透視表和addded這樣的關係:
public function up()
{
Schema::create('channel_subcategory', function (Blueprint $table) {
$table->increments('id');
$table->timestamp('created_at')->useCurrent();
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
$table->integer('channel_id')->unsigned()->nullable();
$table->foreign('channel_id')->references('id')->on('channels')->onDelete('cascade');
$table->integer('subcategory_id')->unsigned()->nullable();
$table->foreign('subcategory_id')->references('id')->on('subcategories') ->onDelete('cascade');
});
}
I want to get one channel given the slug property and the subcategories it belongs to. So I did this in the ChannelController.php
public function show($slug)
{
$channel = Channel::where('channels.slug', '=', $slug)->first();
foreach ($channel as $subcategory) {
echo $subcategory->title;
}
}
I get the error:
ErrorException in ChannelController.php line 107: Trying to get property of non-object
All I want is to show the channel name and the categories it belongs to.
我已經閱讀了大量的博客,包括Laravel文檔,他們總是解釋遷移,如何建立模型中的關係(歸屬),甚至保存相關數據。但是我找不到一個描述(用於假人),現在可以從兩個表中獲取一些數據,例如:
- 獲取一個通道所屬的所有類別。
- 得到所有的信道在一個類中
- 得到屬於多個類別
- 與更多的渠道獲得該類別的所有通道。
換句話說,如何做到這一點的純解釋。
編輯 添加我的信道模型
public function subcategory()
{
return $this->belongsToMany('App\Subcategory')->withTimestamps();
}
我用我的頻道模型編輯了我的問題。那是不正確的? 如果我「var_dump」我得到我看到通道的名稱,也是類別的名稱屬於。我認爲我的問題是試圖迴應子類別的名稱。因此它說:試圖獲得非對象的屬性 –
您的問題中的循環循環通過不是子類別的「$通道」。檢查我顯示的循環。還修復了我的代碼中的關係。從示例中更改關係字段時,我犯了一個錯誤。 – Sandeesh
謝謝你!!!它嘗試了幾天後才起作用!順便說一句:你知道任何教程,我可以得到解釋和建立這樣的查詢,我發佈? (所有類別的頻道,更多頻道的類別,頻道和類別等)?我接受你的答案。再次感謝 –