获得产品的Php递归方法

时间:2015-07-29 14:50:31

标签: php laravel recursion laravel-5

此时我试图以递归方式从指定类别的子项中获取所有产品。

我正在使用laravel并在App / Helpers中创建了一个处理它的类,因此它将被自动加载。

数据库的结构如下 分类:

1|0|2015-07-28 14:45:38|2015-07-28 14:45:38
2|1|2015-07-28 14:52:43|2015-07-28 14:56:47

产品:

1|2|2015-07-28 15:10:45|2015-07-29 11:04:44

因此,产品的分类ID为2.类别2的父ID为1.因此,如果用户位于类别1的页面上,则他/她需要查看属于类别1和类别2的产品,因为2是第1类儿童。

这是我目前的方法:

 public static function getProducts($id) {

        self::$products =  DB::table('products')->where('category_id', $id )->get();

        $categories = DB::table('categories')->where('parent_id', $id)->get();
        if ($categories !== null) {
            foreach ($categories as $category) {
                array_merge(self::$products, self::getProducts($category->id) );
            }
        } 
        return self::$products;
    }

我希望有人可以帮我递归检索属于子类别的所有产品。

更新

我安装了Laravel调试工具栏,发现我的查询在加载网页时没有返回任何结果。当我用我的SQL客户端查询它时,我确实得到了正确的结果。

这是我目前从子类别获取所有产品的方法:

public static function getProducts($id)
    {

        $products = [];
        $categories = DB::table('categories')->where('parent_id', $id)->get();
        array_merge($products, DB::table('products')->where('category_id', $id)->get());
        if ($categories !== null) {
            foreach ($categories as $category) {

                self::getProducts($category->id);
            }
            return $products;
        }
    }

数据库架构:

CREATE TABLE "products" ("id" integer not null primary key autoincrement, "url" text not null, "title" text not null, "keywords" text not null, "description" text not null, "content" text not null, "attributes" text not null, "pdf" text not null, "image" text not null, "category_id" integer not null, "created_at" datetime not null, "updated_at" datetime not null);
CREATE TABLE "categories" ("id" integer not null primary key autoincrement, "url" text not null, "title" text not null, "keywords" text not null, "description" text not null, "content" text not null, "parent_id" integer not null, "created_at" datetime not null, "updated_at" datetime not null);

还打开了调试栏和site => http://remotefix.nl:81/producten/flenzen

如果有人可以帮助我,我们将不胜感激。

1 个答案:

答案 0 :(得分:3)

在Laravel,

hasMany()和belongsTo()创建Parent&儿童类别关系。

只需在扩展Eloquent的模型中使用。样品,

    public function getChildValues() {
        return $this->hasMany('Category', 'parentid');
    }     

    public function getParentValues() {
        return $this->belongsTo('CategoryMN', 'id');
    } 

This link可能会对您有所帮助。

例如,在Controller中检索

$categories_child = Category::with('getChildValues')->get();