Php 查找后期版本的(';线程化';)

Php 查找后期版本的(';线程化';),php,cakephp,cakephp-2.0,Php,Cakephp,Cakephp 2.0,我正在构建一个允许上传多个版本的应用程序。树行为是最好的管理方法吗 $allAssets = $this->Asset->find('threaded', array('order' => array('id' => 'desc'))); foreach ($allAssets as $asset): echo $asset['children'][0]['Asset']['value']; endforeach; 目标是获取每个资产

我正在构建一个允许上传多个版本的应用程序。树行为是最好的管理方法吗

$allAssets = $this->Asset->find('threaded',  array('order' => array('id' => 'desc')));
    foreach ($allAssets as $asset):
        echo $asset['children'][0]['Asset']['value']; 
    endforeach;

目标是获取每个资产的最新版本的值。如果没有孩子,我该怎么做?是否有更好的方法为资产版本提取嵌套数组

您可能需要查看可包含的行为

假设您的资产模型中有以下设置

public $belongsTo = array(
    'ParentAsset' => array(
        'className' => 'Asset',
        'foreignKey' => 'parent_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
)

public $hasMany = array(
    'ChildAsset' => array(
        'className' => 'Asset',
        'foreignKey' => 'parent_id',
        'dependent' => true,
        'conditions' => '',
        'fields' => '',
        'order' => 'created ASC'
    )
);
然后在AssetController中加载可包含的行为,如下所示

$this->Asset->Behaviors->load('Containable',array('autoFields' => false));
$this->Asset->find('all',  array(
    'order' => array (
        'id' => 'desc'
        ),
    'contain' => array(
        'ChildAsset' => array(
            'fields' => 'ChildAsset.value',
            'order' => 'ChildAsset.created asc'
    )
    )
);
然后像这样执行您的查找

$this->Asset->Behaviors->load('Containable',array('autoFields' => false));
$this->Asset->find('all',  array(
    'order' => array (
        'id' => 'desc'
        ),
    'contain' => array(
        'ChildAsset' => array(
            'fields' => 'ChildAsset.value',
            'order' => 'ChildAsset.created asc'
    )
    )
);
此find方法应返回以下格式的数组

array(
    (int) 0 => array(
        'Asset' => array(
            'name' => 'assetVersion1',
            'id' => '1234'
        ),
        'ChildAsset' => array(
            (int) 0 => array(
                'name' => 'assetVersion2',
                'id' => '2222',
                'parent_id' => '1234',
                'created' => '2013-06-10 12:00:00'
            )
            (int) 1 => array(
                'name' => 'assetVersion3',
                'id' => '3333'
                'parent_id' => '1234'
                'created' => '2013-06-10 12:30:00'
            )
        )

我看不出“多版本”和树行为之间有任何关系-你能解释一下吗?基本上我需要
数组资产1版本2版本1资产2版本1资产3版本2版本1
设置数据库和php的最佳方法是什么?我需要一棵树吗?我希望保持数组尽可能干净。可以省略包含中的fields参数以返回ChildAsset的所有字段。还可能需要在find add的contain数组中使用条件参数,比如'conditions'=>array('ChildAsset.parent_id=Asset.id)或者类似的东西。。。你必须使用一些参数才能得到想要的结果。还有一件事,你可以给你的“父”资产一个自己的父id,然后你应该在ChildAsset嵌套数组中得到所有内容、父和子。问题是,所有版本都不是作为1级深度数组返回的。我只想能够按ID排序并显示每个资产最高级别的数据。有没有更好的方法来建立我的数据库,这样我就不必处理整个儿童/无儿童问题?我不确定我是否遵循。。。您的问题是关于使用子数组和提取嵌套数组。您想按id排序,还是按最新版本排序?您能否举例说明您希望阵列数据的外观和表设置?听起来您可以通过使用适当的字段和排序来处理,但您需要提供更多的上下文为什么不在表中设置一个version列呢。然后关闭资产名称列上的任何isunique验证,这样您就可以拥有asset1 | version1、asset1 | version2等。。。