cakephp:从 table 检索数据

cakephp: retrieving data from table

我正在尝试从 table 中检索数据,但我希望 return 值是单个值列表(不是键值数组),例如:

$data = $this->find( 'list', array ('fields' => 'name');

当前输出:

Array ( [0] => Array ( [0] => Array ( [name] => WINNIPEG ) ) 
        [1] => Array ( [0] => Array ( [name] => ALBERTA) ) 
        [2] => Array ( [0] => Array ( [name] => MONTREAL ) ) 
        [3] => Array ( [0] => Array ( [name] => POPLAR PT ) )

我想要的:

Array(
WINNIPEG,
ALBERTA,
MONTREAL,
POPLAR PT
)

我该怎么做?

在您调用 ->find() 的模型中,将您的 displayField 属性设置为 name

class User extends AppModel {
    public $displayField = 'name';
}

这将使 $this->find('list') 默认输出名称字段。

阅读有关 displayField 的更多信息here

注意:如果您在调用 ->find() 时指定字段,您应该在字段名称前加上模型名称,即。 $this->find('list', ['fields' => 'MyModel.name']

$this->find('list',...)用于返回键值对,其中键是记录的id,而value通常是一个重要的值,如nametitle.

您需要使用适当的条件、字段规范等调用 $this->find('all',...)。这将为您提供一个数组数组,每个返回的记录对应一个数组,每个数组都有一个键模型名称,例如 City,作为值的另一个数组,每个字段被选为键,每个字段的值作为值。

因此,要获得名字,您需要执行 $results[0]['City']['name'];

您可以使用 foreach 语句或类似语句将此数据结构转换为您想要的数据结构。

一个 classic Cake 的方法是使用 Hash 实用程序 Class。要在此示例中获得所需的数组,您可以执行以下操作:Hash::extract($results, '{n}.City.name');

查看哈希实用程序的文档 class,它有很多方便的东西。

干杯!

你得不到

Array(
    WINNIPEG,
    ALBERTA,
    MONTREAL,
    POPLAR PT
)

你会得到什么

Array(
   0 => WINNIPEG,
   1 => ALBERTA,
   2 => MONTREAL,
   3 => POPLAR PT
)

你需要先按照@Hippie 所说的去做(在你的模型上设置显示字段)

public $displayField = 'name';

然后获取名单

$namesList = $this->ModelName->find('list');

$namesList 打印=>

Array(
   0 => WINNIPEG,
   1 => ALBERTA,
   2 => MONTREAL,
   3 => POPLAR PT
)

如果你想得到这样的字符串:

"WINNIPEG, ALBERTA, MONTREAL, POPLAR PT"

您可以使用 php 函数 implode(',', $namesList);