我刚刚开始学习Laravel 5,所以我希望我的问题不是太愚蠢。我正在努力实现以下目标。我有3张桌子
广告 类别 advert_category
在我的类别表中,我有主要和子类别。所以父类别的parent_id为NULL,否则显示父类的id。当我保存新广告时,我将广告ID和category_id保存在数据透视表advert_category中。一切正常。我现在正在尝试以下方法。我想要显示带有Maincategories和Subcategories的导航。当我点击子类别然后我可以从advert_category表中轻松读出advert_id,因为我只查找1个category_id,但我现在计划能够点击Maincategory,现在显示属于的所有广告此Maincategory中的所有子类别。所以我的方法如下:
// Look up if passed id is found under parent_id column
$cat = Category::where('parent_id', $id)->get();
// The choosen category is a maincategory,
// therefore build dynamic where to look for all the id's
if (count($cat) > 0)
{
$query = Category::select();
foreach($cat as $value)
{
$query->orWhere('id', '=', $value->id);
}
$advertList = $query->get();
}
else{
$advertList = Category::findOrFail($id);
}
return view ('publicpage.adverts.showall',['advertList' => $advertList->adverts]);
不幸的是,当我进入Maincategory时,我得到以下错误。当我继续使用子类别时,我会看到所显示的广告。
未定义属性:Illuminate \ Database \ Eloquent \ Collection :: $ adverts
dd($ advertlist)带来以下结果:
点击Maincategory:
收藏{#203▼
#items:array:2 [▼0 =>类别{#204▶}
1 =>类别{#205▶}
]}
所以它显示了Collection。
点击子类别
类别{#201▼
#table:“类别”
#connection:null
我可以看到显然存在差异,但我不知道,如何解决这个问题或者最好的方法是什么。我希望我能够很好地理解我的任务,并期待任何建议。提前谢谢!
更新
在下面的评论之后,我试了一下:
// Look up if passed id is found under parent_id column
$cat = Category::where('parent_id', $id)->get();
if (count($cat) > 0)
{
$query = Category::select();
foreach($cat as $value)
{
$query->orWhere('id', '=', $value->id);
}
$advertList = $query->get();
return view ('frontend.adverts.showall',['advertList' => $advertList[0]->adverts]);
}
else{
// 1 Category,
$advertList = Category::findOrFail($id);
return view ('frontend.adverts.showall',['advertList' => $advertList->adverts]);
}
通过这种方式,我获得了第一个类别的广告,但我如何设法移交所有类别的广告,或者我该如何处理?我似乎似乎无法解决这个问题。或者改变是否在视图中?我在视图中尝试了另一个foreach以及运行adervertList,但是再次没有成功。有什么建议?非常感谢你提前!
答案 0 :(得分:1)
TL;博士
问题出在这里,你使用$advertList->adverts
和$advertList
可能在某些情况下是集合(你可以认为它是某种数组)。
所以你不能简单地写$array->adverts
但你应该做这样的事情$array[0]->adverts
,以防你只想获得adverts
第一个元素。