加入桌子并用Laravel显示产品的最低价格

时间:2016-06-08 14:11:50

标签: php mysql laravel-4

我在Laravel中仍然非常新,需要一些帮助。目前我的表productscategory_id列,我可以从中保存每个产品的类别。另一个表格category,其中包含category_idcategory_name ..

现在我想在页面上显示除id = 1的类别以外的所有类别,并在每个类别链接旁边显示此类别中产品的最低价格。

到目前为止,在我的类别控制器中,我只列出了页面上的所有类别,但我不知道应该如何构建查询

这是控制器

$categories = Categories::paginate(15);
    return View::make('site.index', [
            'categories' => $categories
    ]); 
}

我在phpmyadmin中玩过sql查询,这是正确的查询或至少返回正确的结果..

SELECT price
   FROM products a
   JOIN ( 
         SELECT MIN( price ) AS minprice
         FROM products
         WHERE category_id =2
         )b 
ON a.price = b.minprice
AND a.category_id =2

1 个答案:

答案 0 :(得分:1)

虽然可以使用原始声明来完成,但我不推荐它,因为Laravel提供了开箱即用的功能。

您可以使用Larvel's relations来实现这一目标。

所以你有一个名为category的表,它与products表有manyToMany个关系。因为在一个类别中可以有许多产品,同时产品可以属于多个类别。

你必须为你拥有的每张桌子创建一个模型(我假设你已经这样做了)。之后,您必须定义表格的关系。

假设我们有一个名为ProductsModel的模型。让我们假设它看起来像这样:

class ProductsModel extends Model
{
    protected $table = 'products';
    protected $fillable = [
       ...
    ];

    //Here we will define the relation between
    //this model and another model
    public function products()
    {
        return $this->hasMany(
            'Namespace\To\Your\CATEGORIES\Model\Goes\Here'
            'related_foregin_key_goes_here'
        );
    }
}

我们还需要另一种类别的模型。

class CategoriesModel extends Model
{
    protected $table = 'categories';
    protected $fillable = [
       ...
    ];

    //Here we will define the relation between
    //this model and another model
    public function categories()
    {
        return $this->hasMany(
            'Namespace\To\Your\PRODUCTS\Model\Goes\Here',
            'related_foregin_key_goes_here'
        );
    }
}

一旦完成该部分,您可以简单地执行以下操作:

$products = ProductsModel::where('category_id', '!=', 1)
    ->with('categories')
    ->min('price')
    ->get()
    ->toArray();

现在,我在这里非常诚实,我的Laravel 4技能非常生疏,但我认为它应该可以正常工作。