我对laravel没有太多经验,但我正在尝试按类别对我的产品进行排序...... 我已经可以对所有产品进行排序,但不能按类别排序。
你能帮助我吗?型号:
class Product extends Model {
protected $table = 'products';
public function getCategoriesListAttribute(){
return $this->categories()->lists('id');
}
public function categories(){
return $this->belongsToMany('App\Modules\Webshop\Models\ProductCategory', 'category_product', 'product_id', 'category_id')->withTimestamps();
}}
产品表:
Schema::create('products', function(Blueprint $table)
Schema::create('category_product', function(Blueprint $table)
Schema::create('product_categories', function(Blueprint $table)
Schema::create('product_tag', function(Blueprint $table)
控制器:
class ProductsController extends Controller {
public function __construct()
{
//$this->middleware('auth');
}
public function index()
{
$viewmodel = array(
"categories"=> ProductCategory::where('visible', '1')->get(),
"products" => Product::has('categories')->get(),
"page"=>Page::where('href','=', '/')->first(),
);
return view('Webshop::frontend.view.products.index', $viewmodel);
}
}
index()仅显示具有任何类别的产品。
如果你们需要更多信息,请随时询问:)
编辑:
我正在我的控制器中尝试这个。
public function index()
{
$viewmodel = array(
"products" => Product::with('categories')->where('category_id','23'),
);
return view('Webshop::frontend.view.products.index', $viewmodel);
}
和此:
$viewmodel = array(
"products" => Product::leftJoin('category_product', 'category_product.product_id', '=', 'products.id')
->leftJoin('product_categories', 'product_categories.id', '=', 'category_product.category_id')
->where('category_id', 23)
->first(['products.*']),
);
return view('Webshop::frontend.view.products.index', $viewmodel);
我有一个ID为23的类别。
答案 0 :(得分:0)
好吧,如果您真的想要排序',请使用orderBy()
查询构建器方法。如果您需要按位于另一个表中的某些数据进行排序,请使用join()
将这些字段包含在查询中。请注意,在Eloquent Builder中使用join()
时,您还需要使用select("products.*")
,否则Laravel会尝试在查询结果中提取不正确的列。
如果您需要按类别对查询结果进行分组,请使用查询结果集合的group()
方法。您可以按category_id
字段进行分组。
答案 1 :(得分:0)
修正了它!
我将此添加到我的模型中
public function show($category_slug)
{
$viewmodel = array(
"categories"=> ProductCategory::where('visible', '1')->get(),
"products" => Product::getCategorieSlug($category_slug),
"page"=>Page::where('href','=', '/')->first(),
);
return view('Webshop::frontend.view.products.index', $viewmodel);
}
这是我的控制器
{{1}}