2015-02-09 8 views
0

Я пытаюсь получить данные из таблицы, но я хочу, возвращаемое значение будет единый список значений (не массив ключ-значение), как:CakePHP: извлечение данных из таблицы

$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 
) 

Как я могу это сделать?

+0

@ThisSuitIsBlackНе спасибо за редактирование моего вопроса! Я новичок здесь – user3324991

+0

Добро пожаловать. Вопросы с плохим форматированием и нерелевантными/неправильными тегами, как правило, плохо принимаются здесь, поэтому убедитесь, что все выглядит хорошо в предварительном просмотре перед публикацией. – ThisSuitIsBlackNot

+0

Спасибо. Я буду помнить это в следующий раз :) – user3324991

ответ

1

В модели, которую вы вызываете ->find(), установите для атрибута displayField значение name.

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

Это заставит $this->find('list') выводить имя поля по умолчанию.

Подробнее о displayField here.

Примечание: Если вы указываете поля при вызове ->find(), вы должны указать имя поля с именем модели, т.е. $this->find('list', ['fields' => 'MyModel.name']

+0

спасибо! что сработало :) – user3324991

-1

$this->find('list',...) для возвращения пары ключ-значение, где ключ является id в записи, а value обычно значительное значение, как name или title.

Вам необходимо позвонить $this->find('all',...) с соответствующими условиями, спецификациями полей и т. Д. Это даст вам массив массивов, по одному для каждой возвращенной записи, и каждый из них будет иметь ключ для имени модели, City для например, и как значение другого массива с каждым полем, выбранным как ключ, и значением каждого поля в качестве значения.

Таким образом, чтобы получить первое имя, вы должны были бы сделать $results[0]['City']['name'];

Вы можете превратить это структура данных на тот, который вы хотите с заявлением Еогеасп или аналогичный.

Классический торт - это использовать класс полезности Hash. Чтобы получить массив, который вы хотите в этом примере, вы должны: Hash::extract($results, '{n}.City.name');

Проверьте документы для класса Hash Utility, у него много удобных вещей.

Cheers!

+0

Использование Hash :: extract() для этого простого запроса не является хорошей практикой. и найти все сделать работу труднее, и он не получит то, что ожидает. – Fury

+0

он хочет «один список значений», а не ключевое значение, например primaryKey-> value. Почему хеш :: экстракт не является хорошей практикой? и почему find-> все усложняет работу? пожалуйста, объясните :) –

+0

спасибо! Я пытался использовать $ this-> find ('all', ...) раньше, но я думаю, что он возвращает вложенный массив, поэтому я его не использовал. Hash :: extract - хорошая идея! Я буду использовать его в следующий раз :) – user3324991

0

Вы не можете получить

Array(
    WINNIPEG, 
    ALBERTA, 
    MONTREAL, 
    POPLAR PT 
) 

Что вы получите будет

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

Вы должны сначала сделать то, что сказал @Hippie (Set поле отображения на вашей модели) по

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 взрывать ('', $ namesList);

+0

спасибо! Я буду помнить функцию implode в следующий раз, когда мне нужна строка :) – user3324991

Смежные вопросы