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 代码提示