2015-04-13 3 views
0

Итак, я настраиваю отношения между моими пользователями и ролями, все прошло нормально, пока я не попытался получить каждую запись. Например, если я просто иду с:Laravel 5 - Получение всех записей из коллекции в пределах сводной таблицы

User::with('roles')->findOrFail(1); 

Тогда все хорошо, она возвращает пользователю, и в этом случае на 2 роли назначены. Однако я не могу обвести вокруг себя это:

Скажите, что я хочу получить всех пользователей и все их роли, чтобы я мог отображать их в таблице, например, как бы я это сделал? Я просто не могу обернуть вокруг себя голову.

+0

Я думаю, вам нужно показать какую-то работу над тем, что вы пытаетесь, что не работает. –

ответ

1

Если вы используете findOrFail сам по себе без сцепления другого метода User::findOrFail(1), он будет возвращать коллекцию, но как только вы начинаете добавлять другие условия, которые вы должны вызвать либо ->get() для сбора пользователей, ->first или ->last() для одного объекта пользователя, или если вы делаете что-то с ->lists(), вы получите массив. В противном случае вы получите класс строитель, вот пример: {{дд (User :: где («ид», 1))}}

Builder {#1097 ▼ 
    #query: Builder {#1096 ▶} 
    #model: User {#409 ▶} 
    #eagerLoad: array:1 [▶] 
    #macros: array:4 [▶] 
    #onDelete: Closure {#1102 ▶} 
    #passthru: array:12 [▶] 
} 

Класс Builder, как подготовленное заявление, которое никогда не выполнен , При вызове dd() вы должны увидеть что-то похожее на следующее.

Это даст вам набор {{дд (\ App \ User :: где ('идентификатор', 1) -> получить())}}

Collection {#1105 ▼ 
    #items: array:1 [▼ 
    0 => User {#1108 ▼ 
     #cardUpFront: false 
     #dates: array:3 [▶] 
     #table: "users" 
     #fillable: array:2 [▶] 
     #hidden: array:2 [▶] 
     #connection: null 
     #primaryKey: "id" 
     #perPage: 15 
     +incrementing: true 
     +timestamps: true 
     #attributes: array:17 [▶] 
     #original: array:17 [▶] 
     #relations: [] 
     #visible: [] 
     #appends: [] 
     #guarded: array:1 [▶] 
     #casts: [] 
     #touches: [] 
     #observables: [] 
     #with: [] 
     #morphClass: null 
     +exists: true 
     #forceDeleting: false 
    } 
    ] 
} 

или получить единый объект {{дд (\ App \ пользователя :: где ('ID', 1) -> первый())}}

User {#1108 ▼ 
    #cardUpFront: false 
    #dates: array:3 [▶] 
    #table: "users" 
    #fillable: array:2 [▶] 
    #hidden: array:2 [▶] 
    #connection: null 
    #primaryKey: "id" 
    #perPage: 15 
    +incrementing: true 
    +timestamps: true 
    #attributes: array:17 [▶] 
    #original: array:17 [▶] 
    #relations: [] 
    #visible: [] 
    #appends: [] 
    #guarded: array:1 [▶] 
    #casts: [] 
    #touches: [] 
    #observables: [] 
    #with: [] 
    #morphClass: null 
    +exists: true 
    #forceDeleting: false 
} 

и, наконец, массив с {{дд (\ App \ User :: где ('id', 1) -> списки ('email', 'id'))}}

array:1 [▼ 
    1 => "[email protected]" 
] 

Надеюсь, это поможет.

+0

Спасибо, я чувствую себя идиотом, как только я вернулся к документам laravel. Прочитав это, я сразу увидел ответ, не знаю, почему я пропустил это, спасибо снова – Holo

1

Я думаю, вам просто нужно использовать get, и это все, что вы должны делать.

Контроллер:

$users = User::with('roles')->get(); 

В файле вида вы должны использовать другой Еогеасп, если пользователь может иметь множество ролей:

Вид:

@foreach ($user as $user) 

    <h1>{{ $user->name }}</h1> 

    @foreach ($user->roles as $role) 

     <h2>{{ $role->id }}</h2> 

    @endforeach 

@endforeach 

Подробная информация о eager loading является на eloquent документация.

+0

Спасибо, петля сделает то, что мне нужно. – Holo

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