2016-02-07 4 views
2

Я пытаюсь узнать Laravel, и мне было очень приятно, пока я не упал!Laravel5 Красноречивый метод Все возвращающие неожиданные результаты

Я создал таблицу под названием suggestions и засеял ее некоторыми поддельными данными.

Это выглядит следующим образом:

enter image description here

У меня есть файл модели под названием Suggestion.php, который имеет следующий код:

<?php 
namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Suggestion extends Model 
{ 
// 
} 

В моем routes.php файле у меня есть это:

use App\Suggestion; 
Route::get('/', function() { 
    $suggestions = Suggestion::all(); 
    return '<pre>' . var_dump($suggestions) . '</pre>'; 
}); 

Я ожидаю получить массив записей в моей базе данных, но вместо этого я получаю объект Illuminate\Database\Eloquent\Collection, который имеет два массива: массив macros и массив items. Начало var_dump выглядит следующим образом:

enter image description here

данных Я хочу, чтобы получить доступ на самом деле, как представляется, в attributes массиве, но это не кажется, что это как Laravel должен работать.

Это действительно смущает меня, поскольку я пытаюсь следовать ряду учебников (like this one), и кажется, что я должен получить простую коллекцию, которую я могу перебрать.

Я сделал некоторые исследования по этой проблеме, и я нашел другие сообщения переполнения стека, такие как this one, но на самом деле это не касается моего вопроса.

Я как бы понял, что я каким-то образом испортил мою модель предложений или не сделал это правильно, но помимо этого я потерялся.

Заранее благодарим за любые рекомендации, которые вы можете дать мне. Я на самом деле намерен использовать контроллер и представление, но для простоты представления моей проблемы здесь я помещаю нужный код в файл маршрутов.

+0

Вы должны получить коллекцию и перебирать его. Пожалуйста, покажите нам, как вы это делаете в данный момент. – user2094178

+1

Как уже было сказано, просто предварите его как обычный массив, сборники итерабельны. Модели хранят свои свойства в массиве 'protected $ attributes'. К этим свойствам относятся магические геттеры и сеттеры. TLDR: он работает правильно. – jardis

+0

И если вы действительно хотите получить массив, вы можете вызвать метод 'all()' в Collection, –

ответ

4

Красноречивые методы, как все и получить которые получить несколько результатов, было экземпляра Осветите \ Database \ Eloquent \ Collection будет возвращен. Класс Collection предоставляет множество полезных методов для работы с результатами вашего «Красноречивого». Конечно, вы можете просто цикл по этой коллекции как массив

from the docs

так что вы правы красноречивым вернуть коллекцию.

это есть раздел в документах, как с ним работать https://laravel.com/docs/5.2/collections

+0

Чтобы добавить к этому ответу, если вы хотите массив, используйте метод Collection 'toArray()' – Devon

+0

Спасибо! Мой вопрос сейчас кажется довольно глупым, но я оставлю его на случай, если кто-то другой подумает, что у них такая же проблема. –

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