Laravel 5:按类别对产品进行分类,

时间:2015-11-26 08:34:44

标签: php laravel model scope eloquent

我对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的类别。

2 个答案:

答案 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}}