Красномовний отримує лише один стовпець як масив


84

Як отримати лише один стовпець як один розмірний масив у laravel 5.2 за допомогою красномовства?

Я намагався:

$array = Word_relation::select('word_two')->where('word_one', $word_id)->get()->toArray();

але цей дає його як двовимірний масив, як:

array(2) {
      [0]=>
      array(1) {
        ["word_one"]=>
        int(2)
      }
      [1]=>
      array(1) {
        ["word_one"]=>
        int(3)
      }
    }

але я хочу отримати це як:

array(2) {
    [0]=>2
    [1]=>3
}

Відповіді:


181

Ви можете використовувати pluckметод:

Word_relation::where('word_one', $word_id)->pluck('word_two')->toArray();

Щоб отримати додаткову інформацію про те, які методи доступні для використання з колекцією, ви можете переглянути документацію Laravel .


Дякую, це була функція, яку я десь бачив, але більше не знайшов, також для запису, щоб відповідь була прецизною, тоді, можливо, додати -> toArray (), оскільки вона повертає колекцію на даний момент, а вибір можна пропустити з запиту для laravel 5.2 щонайменше.
Riiwo

Правда щодо selectнадлишку, але я не бачу проблеми з наявністю колекції в результаті, оскільки колекція - це просто вигадливий масив, який можна повторити так само, як масив. Я рідко використовую масиви замість колекцій, оскільки розмір пам'яті, як правило, не є проблемою, і колекції можуть бути легко передані в масиви там, де це потрібно, оскільки вони реалізують toArrayметод. Однак для узгодження вашого запитання я змінив відповідь, щоб перетворити результат.
Богдан

На даний момент я зовсім не новачок у красномовному та красномовному, тому мені вони були потрібні як масив чисел, щоб пізніше об'єднати масив із подібним та використовувати його в іншому запиті
Riiwo

Дякуємо, що поділились цим!
Бхаргав Нанекалва

3
Хоча у a Collectionтакож є pluck()метод - Те, що ви використовуєте, є методом QueryBuilder.
Paul Spiegel

12

Якщо ви отримуєте кілька записів, правильний метод називається списками .

    Word_relation::select('word_two')->where('word_one', $word_id)->lists('word_one')->toArray();

2
Чудово! Він lists()прекрасно працює сам. Дякую.
moreirapontocom

1
Бум! Це працює чудово. Але не потрібно використовувати функцію toArray (), оскільки list () повертає масив.
Сахан,

1
lists()застаріло в Laravel Ver.5.2 і пізніших версіях, де, pluck()як у відповіді з тегами, це шлях.
Masa Sakano

7

Це можна зробити коротко, як:

Model::pluck('column')

де модель - це така модель, як Userмодель та стовпець як назва стовпцяid

Якщо ти зробиш

User::pluck('id') // [1,2,3, ...]

І, звичайно, ви можете мати будь-які інші речення, такі як whereречення, перед тим, як зривати


5

Я зіткнувся з цим запитанням і подумав, що пояснитиму, що метод списки () красномовного об’єкта будівельника знецінений у Laravel 5.2 і замінений на pluck ().

// <= Laravel 5.1
Word_relation::where('word_one', $word_id)->lists('word_one')->toArray();
// >= Laravel 5.2
Word_relation::where('word_one', $word_id)->pluck('word_one')->toArray();

Ці методи можна також викликати в колекції, наприклад

// <= Laravel 5.1
  $collection = Word_relation::where('word_one', $word_id)->get();
  $array = $collection->lists('word_one');

// >= Laravel 5.2
  $collection = Word_relation::where('word_one', $word_id)->get();
  $array = $collection->pluck('word_one');

-3

Я думаю, ви можете досягти цього, використовуючи наведений нижче код

Model::get(['ColumnName'])->toArray();


Ви можете пояснити це.
J ... S

1
Наскільки мені відомо, робити Model::get(['ColumnName'])->toArray();це рівноцінно виконанню, Model::select('ColumnName')->get()->toArray()результатом якого є багатовимірний масив.
SamBremner
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.