Laravel使用关系简化数据库查询

时间:2016-06-09 18:36:04

标签: php mysql laravel

我刚刚开始与Laravel合作并认为它是一个非常好的框架。 但是有很多东西需要学习,我可以在用户指南中找到除了这部分之外的所有内容:

我正在尝试从我的数据库中获取项目,它们使用与此表中的其他表item_catagories相关的类别ID进行排序: ID 名称 父

在我的网站网址中,我使用的是类别名称,而不是ID。

http://example.com/catagory/subcatagory

当子目录具有我想要搜索相关项目的值时。 我现在有这样的话:

if($subcategory){
    $foo = ItemCategories::where(['group' => $category, 'name'=> $subcategory])
                           ->get()[0]->id;
    $data['products'] = Items::where('category_id', $foo)->get();
}

但必须有一种更简单的方法来获得相同的结果。

我希望有人可以帮助我理解我如何做得更好

修改

我忘了添加关系代码:

项目类:

public function categorie(){
    return $this->hasOne('App\ItemCategories');
}

类别类:

public function items(){
    return $this->belongsTo('App\Items');
}

2 个答案:

答案 0 :(得分:0)

你可以使用Laravel Eloquent的关系。在您的类别模型上:

public function items() { return $this->hasMany('Items'); }

完成上述操作后,您可以$category->items获取所有相关项目。

顺便提一下,当你这样做时:

->get()[0]

你可以这样做:

->first()

答案 1 :(得分:0)

如果您希望填充结果,可以采用以下方法:

$foo = ItemCategories::where(['group' => $category, 'name'=> $subcategory])->with('items')->first();