phalcon:如何无限类?

Posted

技术标签:

【中文标题】phalcon:如何无限类?【英文标题】:phalcon : how to infinite categories? 【发布时间】:2016-08-09 16:42:04 【问题描述】:

我有一张这样的桌子:

category_id
parent_category_id
category_name

我想创建无限类别循环,所以我想使用 hasOne、hasMany、belongsTo 关系词,但我该怎么做?

这是我的分类类:

<?php

use \Phalcon\Mvc\Model;

class Category extends Model

    public $category_id;

    public $parent_category_id;

    public $name;

    public $image;

    public $description;

    public function initialize()
    
        /**
         * every category has only one parent category
         */
        $this->hasOne('category_id', 'Category', 'parent_category_id', ['alias' => 'category_id']);
    

错了吗?什么是最好的解决方案? p.s. : 我想学怎么做呢? (给我建议)

【问题讨论】:

不幸的是,这个问题听起来完全不清楚。你需要什么无限循环?你想在里面做什么?您的代码根本没有循环... @YakovL,他想在一堆类别之间创建链式关系。 @Timothy,你是对的,我已经尝试了 2 天,但还没有完成 我发布的答案对您有帮助吗? 我没有时间尝试...我会尽快回复您@Timothy ... 【参考方案1】:

您定义的关系只允许您建立一对一的关系。 意思是,每个类别只有 1 个父 并且 1 个父只有 1 个子。 我猜这不是您正在寻找的行为。

$this->hasOne('category_id', 'Category', 'parent_category_id', ['alias' => 'category_id']);

这是一个 1 到 N 关系的示例,其中 1 个类别可以有 1 个父级并且 1 个父级可以有多个子级。

为避免混淆,您应该为关系指定一个有意义的别名。

public function initialize()

    // a category can have multiple child categories 
    $this->hasMany('category_id', 'Category', 'parent_category_id', ['alias' => 'child_categories']);

    // a category only has one parent category
    $this->belongsTo('parent_category_id', 'Category', 'category_id', ['alias' => 'parent_category']);

上述关系可以如下使用 (注意there are also other methods to request related data)

// will return an array of Category objects. Because our relation was "hasMany"
$categoryChildren = $category->getRelated('child_categories');

// will return a single Category object. Because we can only have one parent
$categoryParent = $category->getRelated('parent_category');

示例: 假设您必须关注数据:

category_id | parent_category_id | category_name
----------- | ------------------ | -------------
1           | null               | A
2           | 1                  | B
3           | 1                  | C
4           | 2                  | D
5           | 4                  | E

// returns categories: B, C
$category = Category::findFirstById(1)->getRelated('child_categories');
// returns categories: null
$category = Category::findFirstById(1)->getRelated('parent_category');

// return categories: D
$category = Category::findFirstById(2)->getRelated('child_categories');   
// returns categories: A
$category = Category::findFirstById(2)->getRelated('parent_category');

// return categories: null
$category = Category::findFirstById(3)->getRelated('child_categories'); 
// returns categories: A
$category = Category::findFirstById(3)->getRelated('parent_category');

// return categories: E
$category = Category::findFirstById(4)->getRelated('child_categories');
// returns categories: B
$category = Category::findFirstById(4)->getRelated('parent_category');

// return categories: null
$category = Category::findFirstById(5)->getRelated('child_categories');
// returns categories: D
$category = Category::findFirstById(5)->getRelated('parent_category');

// returns categories: B
$category = Category::findFirstById(5)->getRelated('parent_category')->getRelated('parent_category');

正如您在最后一个示例中看到的那样,您可以创建一个类别链。

【讨论】:

@Timoty非常感谢您的帮助。我将使用它并返回与您分享结果。再次感谢兄弟。所以谢谢。 @Timothy 很好的例子,仅仅那个格式化的表格就迫使我支持你:)

以上是关于phalcon:如何无限类?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 phpstorm 中使用 phalcon-devtools\ide\phpstorm?

如何在 Phalcon\Forms\Element 中实现单选按钮

phalcon: Windows 下 Phalcon dev-tools 配置 和 Phpstorm中配置Phalcon 代码提示

phalcon: 表单

Phalcon学习笔记

text phalcon-devtools #Phalcon