问题描述
我有 $slug
变量,它采用前端 url slug 值并将其发送到模型范围。在范围内,如果我使用 echo $slug
它可以工作,也可以在查询中工作(我用它来显示只有相同类别 slug 的产品)。
查询 $slug
在哪里工作:
return $query->orwhereHas('category',function($q) use ($slug){
$q->where('slug','=',$slug);
})->paginate($perPage,$page);
这是sql:
select * from `slasher_farming_mods` where exists (select * from `slasher_farming_categories` where `slasher_farming_mods`.`category_id` = `slasher_farming_categories`.`id` and `slug` = 'medium-tractors') limit 4 offset 0
可见的slug值是“中型拖拉机”。
如果我尝试在排序循环内或品牌循环内使用 $slug,它就会变成空
public function scopeListFrontEnd($query,$options = [],$slug = ''){
extract(array_merge([
'page' => 1,'perPage' => 4,'sort' => 'brandName desc','brands' => null,'categorySlug' => null,],$options));
print $slug; //This works here
if(!is_array($sort)) {
$sort = [$sort];
}
foreach ($sort as $_sort){
if(in_array($_sort,array_keys(self::$allowedSortingOptions))){
$parts = explode(' ',$_sort);
if(count($parts) < 2){
array_push($parts,'desc');
}
list($sortField,$sortDirection) = $parts;
$query->orderBy($sortField,$sortDirection);
}
}
if($brands !== null) {
if(!is_array($brands)){
$brands = [$brands];
}
foreach ($brands as $brand){
$query->orwhereHas('brand',function($q) use ($brand){
$q->where('brand_id',$brand);
});
}
}
$lastPage = $query->paginate($perPage,$page)->lastPage();
if($lastPage < $page) {
$page = 1;
}
return $query->orwhereHas('category',function($q) use ($slug){
$q->where('slug',$slug);
})->paginate($perPage,$page);
}
使用品牌过滤器时的示例 sql
select * from `slasher_farming_mods` where exists (select * from `slasher_farming_brands` where `slasher_farming_mods`.`brand_id` = `slasher_farming_brands`.`id` and `brand_id` = '5') or exists (select * from `slasher_farming_categories` where `slasher_farming_mods`.`category_id` = `slasher_farming_categories`.`id` and `slug` = '') order by `name` desc limit 4 offset 0
Slug 变量变为空。
如何将 slug 变量数据保存在品牌循环或排序循环内?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)