1
關係我有一個定義關係Category
型號:遍歷與預先加載
public function entries() {
return $this->belongsToMany('Entry','entries_categories');
}
當我使用:
$category = Category::find(8);
echo $category->name."<br />";
$entries = $category->entries()->get();
foreach ($entries as $e) {
echo $e->domain."<br />";
}
它工作正常 - 顯示它應該。
但是當我嘗試使用預先加載:
$category = Category::with('entries')->find(8);
echo $category->name."<br />";
foreach ($category->entries as $e) {
echo $e->domain."<br />";
}
我收到以下錯誤:
Invalid argument supplied for foreach()
如果我的代碼更改爲:
$category = Category::with('entries')->find(8);
echo $category->name."<br />";
foreach ($category->entries() as $e) {
echo $e->domain."<br />";
}
我得到沒有錯誤,但循環不會執行一次。
如何在Eager加載的循環中顯示數據?在所有情況下,幾乎與數據庫相同的查詢都會運行,並且如果手動在phpMyAdmin中運行查詢,則會有數據。
您在'entries'調用中必須有一些衝突。你不能通過'entries()'來循環它的關係對象。然而,使用'belongsToMany',只要'$ category-> entries'實際上將關係稱爲動態屬性,就可以在foreach循環中使用它。這就是說,檢查什麼碰撞(accessor?property?)**順便說一句**如果你想玩Eloquent,最好在cli中使用'artisan tinker',而不是在瀏覽器中調用它。 – 2014-09-30 10:06:06
@JarekTkaczyk你可以添加它作爲答案,我會接受。我在數據庫的表中有一個「entries」列,用於存儲屬於類別的條目數(迄今爲止從未使用過),這就是爲什麼它不起作用 – 2014-09-30 10:11:21