我在Laravel中仍然非常新,需要一些帮助。目前我的表products
有category_id
列,我可以从中保存每个产品的类别。另一个表格category
,其中包含category_id
,category_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
答案 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技能非常生疏,但我认为它应该可以正常工作。