2013-10-10 64 views
3

平面数组我使用CakePHP运行一个查询,该查询包括自定义导出字段,以及一些在桌子上。获得从CakePHP的查询

Cake在表中自己的数组中返回其他数组,而其他数组中的其他数字则从0开始 - 实质上是分割我的结果,然后我必须合并到一起。

我知道我可以使用虚拟字段将派生字段放入主数组,但它们非常自定义并且可以改变很多,所以不适合将这些字段作为虚拟字段。

我想要的是某种选项,这样cakephp只是返回数组中的0键。像$this->Model->find('all',$options,RTN_FLAT_ARRAY)

是这样的事情已经可能了吗?

+0

为什么你在单个阵列需要。 –

+0

你想修改CakePHP核心还是打算编写一个插件?你将如何处理一对多的关系? –

+0

您可以使用after-find来做到这一点,或者直接与(现在)一起使用CakePHP返回的内容。你是否有理由超越一致性/方便吗? – AD7six

回答

1

这没有任何意义,因为它会破坏你的结果。您正在使用“全部”查找。因此,预计它将返回数组中的0,1,2 ...记录,而不仅仅是一条记录。如果你压扁这个,你只会得到一个记录而失去所有其他记录。

使用记录里面的“第一”,而不是把你的自定义字段将返回。您可以使用模型的afterFind()回调来修改结果集。

另外我不会扁平数组,结构在某个原因。 CakePHP中的所有东西都遵循约定。因此,例如,当您设置它们时,结果将与您的表单域匹配。如果你改变了这个结构,你将不得不在其他地方做更多的手工工作。按照惯例,他们在那里是有原因的。

+0

我认为你误解了这个问题。他们要求巩固模型名称键和0索引的“这些字段不在表中”键,即$ foo [0] ['Post'] ['title']'=>'$ foo [ 0] [0] ['title']'这在各种情况下都很有意义,但通常要求以相反的方式进行(在主模型的关键字下合并浮动数据)。 – AD7six

1

你可以用这种方式虚拟字段被附加到模型只是动作

1

您可能需要的时间执行find()方法

$this->Model-virtualFields['field_sum'] = 'SUM(field)'; 

$this->Model->find('all', array('fields' => array('Model.field_sum'))); 

前添加在您的控制器的虚拟域看看哈希::压扁
我觉得菜谱做了解释该函数的一个良好的工作:

http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html

$arr = array(
    array(
     'Post' => array('id' => '1', 'title' => 'First Post'), 
     'Author' => array('id' => '1', 'user' => 'Kyle'), 
    ), 
    array(
     'Post' => array('id' => '2', 'title' => 'Second Post'), 
     'Author' => array('id' => '3', 'user' => 'Crystal'), 
    ), 
); 

$res = Hash::flatten($arr); 
/* $res now looks like: 
    Array (
    [0.Post.id] => 1, 
    [0.Post.title] => First Post 
    [0.Author.id] => 1,  [0.Author.user] => Kyle 
    [1.Post.id] => 2,  [1.Post.title] => Second Post 
    [1.Author.id] => 3, [1.Author.user] => Crystal 

“姐妹”函数是Hash :: expand - 它将数组恢复到预平衡状态。

当然,你总是可以写一个循环呈现在你喜欢的任何格式的数组,但那不是很“cakeish”