我有控制器,它将加载视图部分
public function homePage(){
$categories = Category::all();
$products = Product::all();
return view('cart.index',compact('categories','products'));
}
这是视图(基本上检查子类别是否会显示否则跳过)
<ul class="list-group list-group-bordered list-group-noicon uppercase">
<li class="list-group-item active">
@foreach($categories as $row)
<a class="dropdown-toggle" href="#">{{$row->name}}</a>
@if({{StapsController::checkSubcategory($row->id)}})
@foreach($subcategories as $sub)
<ul>
<li><a href="#"><span class="size-11 text-muted pull-right">(123)</span> {{$sub->s_name}}</a></li>
</ul>
@endforeach
@else
<li class="list-group-item"><a href="#"><span class="size-11 text-muted pull-right">(189)</span> {{$row->name}}</a></li>
@endif
@endforeach
</li>
</ul>
以下是checkSubcategory
方法
public function checkSubcategory($id){
$category = Category::find($id);
$id = $category->id;
$subcategories = DB::table ('subcategories')
->join('categories_subcategories','subcategories.id','=','categories_subcategories.subcategory_id')
->join('categories','categories_subcategories.category_id','=','categories.id')
->where('categories.id','=',$id)
->select('subcategories.name as s_name ')
->get();
return $subcategories;
}
但是我在View中的调用方法中遇到了语法错误? 什么可能是错误..在视图部分调用方法有什么错误吗?
答案 0 :(得分:0)
如果checkSubcategory
的逻辑在控制器本身中正常工作,则必须将其传输到模型。即使它成为模型的方法,从视图中你可以做如下的事情:
....
<a class="dropdown-toggle" href="#">{{$row->name}}</a>
@if({{$row->checkSubcategory($row->id);}})
<ul>
....
换句话说,在Category
模型中定义此方法。
答案 1 :(得分:0)
将您的功能放在其他地方,而不是控制器。在你的情况下,也许在Category
模型内?
然后,在View中,您可以像这样使用您的功能:
$row->checkSubcategory($row->id)
无需使功能静止。
答案 2 :(得分:0)
使用这样的关系并通过对象调用。
public function checkSubcategory()
{
return $this->hasMany('App\subcategories');
}
答案 3 :(得分:0)
可以有一种方法可以轻松完成 -
自定义帮助程序功能 我个人更喜欢你使用自定义辅助函数,因为你可以在项目的任何地方调用这个函数。
"files": ["app/Http/helpers.php"]
。现在,无论您在 helpers.php 文件中写什么,都可以轻松访问。
**注意:请记住,在 helpers.php 文件中,所有代码都需要基于函数。不要在此文件中使用class。
答案 4 :(得分:0)
在视图中调用方法不是一个好习惯。在这种情况下,要么创建帮助文件并使用composer加载文件,要么可以使用查询范围。试试看。使用查询范围
首先在您的类别模型中添加此内容。
function scopeCheckSubcategory(){
DB::raw('(SELECT subcategories.name as s_name
FROM `subcategories`
INNER JOIN categories_subcategories on categories_subcategories.subcategory_id = subcategories.id
AND categories_subcategories.category_id = categories.id') AS s_name'
)
}
现在调用范围
$categories = Category::CheckSubcategory->get();
现在检查您的刀片文件
@if($row->s_name)
...
...
@endif
答案 5 :(得分:0)
您的刀片有几个问题,这里是更正版本,
<ul class="list-group list-group-bordered list-group-noicon uppercase">
<li class="list-group-item active">
@foreach($categories as $row)
<a class="dropdown-toggle" href="#">{{$row->name}}</a>
<ul>
@if(StapsController::checkSubcategory($row->id))
<li>
<a href="#">
<span class="size-11 text-muted pull-right">(123)</span> {{$sub->s_name}}
</a>
</li>
@else
<li class="list-group-item">
<a href="#">
<span class="size-11 text-muted pull-right">(189)</span> {{$row->name}}
</a>
</li>
@endif
</ul>
@endforeach
</li>
</ul>
@if({{StapsController::checkSubcategory($row->id);}})
此行错误(语法错误)endforeach
语句if statement
在endforeach
声明missing ul
else statement
个标记
醇>
检查上面我希望这有帮助。