2016-06-09 93 views
0

我刚开始与Laravel合作,并认为它是一个非常好的框架。 但有很多东西要学习,我可以大多找到用户指南中的所有内容,但本部分除外:Laravel简化与关系的数据库查询

我试图从我的数据库中获取项目,它们使用与其他表格相关的类别ID排序item_catagories在这个表中存储: ID 名 父

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

http://example.com/catagory/subcatagory 

当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'); 
} 

回答

0

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

一旦你做到了这一点,在一个类别,你可以做$category->items获取所有的相关项目。

顺便说一句,当你这样做:

->get()[0] 

你可以这样做:如果你希望把你的结果已经填充

->first() 
0

,要做到这一点的一个方法是:

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

谢谢,但我怎么能得到这个修正: 列未找到:1054未知列'items.item_category_id'我n'where子句'我有专栏catagory_id –

+0

可能的项目是一个集合,所以集合没有“category_id”属性来直接从关系中访问。 –

+0

没有Laravel使它item_category_id,但我在我的表catagory_id。 我想要一个特定类别的所有物品,并且物品有一个类别ID。所以是否有可能做类似Item :: all() - 与(catagory,1) 但代替名称为“Test”的名称是表1中的id 1 –