У меня возникли проблемы с перебором объекта (ниже), поскольку он имеет основные данные Пользователь, а затем массивы профиль, рабочие места и фотографии.
Получаю ошибку Invalid argument supplied for foreach()
Заранее благодарю за любую помощь, так как я, кажется, зациклился на мыслях и не могу найти, что делаю неправильно.
В контроллере я вызываю БД:
$team = \App\User::where('users.state', 1)->with('profile','jobs','photos')->get();
$team->jsonSerialize();
Что я сделал, чтобы зациклиться на представлении переменной, содержащей объект, который выдает ошибку
<li>
<a href = "/{!! str_slug(trans('menus.lawyers'), '-') !!}/{!! str_slug(trans('global.words.partners')) !!}" title = "{!! trans('global.words.partners') !!}">{!! trans('global.words.partners') !!}</a>
<ul class = "dropdown">
@foreach($team as $member)
@foreach($member->jobs as $jobs)
// just display if partner | socio
@if ($jobs->slug== 'socio' || $jobs->slug == 'partner')
@foreach($member->profile as $profile)
<li>
<a href = "/{!! str_slug(trans('global.words.lawyer_male'), '-') !!}/{!! $member->profile->full_name_slug !!}" title = "{!! $member->profile->full_name !!}"><img class = "avatar" src = "{{ asset('/images/staff/thumbs/'.$member->photos[3]->filename) }}" alt = "{!! $member->profile->full_name !!}"> {!! $member->profile->full_name !!}
</a>
</li>
@endforeach
@endif
@endforeach
@endforeach
</ul>
</li>
Объект (сокращенная версия):
0 => array:15 [▼
"id" => 2
"guid" => "0b6e0ad2-7daa-4c2b-907a-d095ab577851"
"name" => "John Doe"
"slug" => "john-doe"
"email" => "[email protected]"
"state" => 1
"ordering" => 0
"created_by" => 1
"updated_by" => null
"deleted_by" => null
"created_at" => "2018-02-12 19:59:47"
"updated_at" => "2018-02-12 19:59:52"
"profile" => array:23 [▼
"id" => 2
"user_id" => 2
"full_name" => "John Doe McNamara"
"full_name_slug" => "john-doe-mcnamara"
"short_name" => "John Doe"
"short_name_slug" => "john-doe-mcnamara"
"gender" => "male"
"birth_date" => "1973-05-05"
"work_start" => "2000-01-01"
"work_end" => null
"biography" => "John Doe started the firm in 1900."
"experience" => "A couple of years"
"education" => """
UCLA;\n
Berkley
"""
"affiliations" => ""
"notes" => ""
"hits" => 3
"state" => 1
"ordering" => 0
"created_by" => 1
"updated_by" => null
"deleted_by" => null
"created_at" => "2018-02-12 20:07:00"
"updated_at" => "2018-02-24 12:32:52"
]
"jobs" => array:2 [▼
0 => array:15 [▼
"id" => 1
"guid" => "45f91a68-d219-42b1-8980-8cb77d6688b4"
"type" => "Lawyer"
"slug" => "lawyer"
"department" => "Law"
"notes" => null
"language" => "en"
"state" => 1
"ordering" => 4
"created_by" => 1
"updated_by" => null
"deleted_by" => null
"created_at" => "2018-02-11 01:43:04"
"updated_at" => null
"pivot" => array:2 [▼
"user_id" => 2
"job_id" => 1
]
]
1 => array:15 [▼
"id" => 11
"guid" => "fcf9f310-eeb1-4ff4-b133-6c80d6bf3b7f"
"type" => "Partner"
"slug" => "partner"
"department" => "Law"
"notes" => null
"language" => "en"
"state" => 1
"ordering" => 1
"created_by" => 1
"updated_by" => null
"deleted_by" => null
"created_at" => "2018-02-11 01:49:38"
"updated_at" => null
"pivot" => array:2 [▼
"user_id" => 2
"job_id" => 11
]
]
]
"photos" => array:4 [▼
0 => array:14 [▼
"id" => 5
"guid" => null
"user_id" => 2
"type" => "profile"
"directory" => "staff"
"subdirectory" => "profile"
"filename" => "[email protected]"
"state" => 1
"ordering" => 0
"created_by" => 1
"updated_by" => null
"deleted_by" => null
"created_at" => "2018-02-12 20:03:31"
"updated_at" => null
]
1 => array:14 [▼
"id" => 6
"guid" => null
"user_id" => 2
"type" => "bgs"
"directory" => "staff"
"subdirectory" => "bgs"
"filename" => "[email protected]"
"state" => 1
"ordering" => 0
"created_by" => 1
"updated_by" => null
"deleted_by" => null
"created_at" => "2018-02-12 20:03:49"
"updated_at" => null
]
2 => array:14 [▶]
3 => array:14 [▶]
]
]
1 => array:15 [▶]
2 => array:15 [▶]
3 => array:15 [▶]
4 => array:15 [▶]
5 => array:15 [▶]
6 => array:15 [▶]
7 => array:15 [▶]
8 => array:15 [▶]
9 => array:15 [▶]
10 => array:15 [▶]
11 => array:15 [▶]
12 => array:15 [▶]
13 => array:15 [▶]
]
Я пытался не вызывать какой-либо метод и не получать объект, попробовал ->toArray(), а теперь и ->jsonSerialize();, чтобы выяснить, может ли это быть одной из причин.
Не звоните никому из них. Запрос вернет Laravel collection, который объективно лучше массива. И JSON не имеет смысла, поскольку вы используете его с PHP. Кроме того, я почти уверен, что он буквально ничего не делает, поскольку вам нужно явно переопределить объект $users. В любом случае попробуйте определить, какой из foreach вызывает ошибку. Вероятно, в сообщении об ошибке указано кешированное представление. Вы можете перейти к нему в большинстве современных текстовых редакторов, используя Ctrl + P и введя первые несколько символов.
Похоже, ошибка идет по шлейфу @foreach($member->profile as $profile)
Чтобы заставить его работать, я обнаружил, что мне не нужен цикл @foreach($member->profile as $profile). Тогда я должен назвать, например, {!! $member->profile['full_name'] !!}, и вот так он работает.






Вы получаете сообщение об ошибке, если вы использовали JsonSerializeed
Вот код, который вы можете использовать
$team = \App\User::where('users.state', 1)->with('profile','jobs','photos')->get();
и, на ваш взгляд, повторяйте его, как вы уже делаете
<li>
<a href = "/{!! str_slug(trans('menus.lawyers'), '-') !!}/{!! str_slug(trans('global.words.partners')) !!}" title = "{!! trans('global.words.partners') !!}">{!! trans('global.words.partners') !!}</a>
<ul class = "dropdown">
@foreach($team as $member)
@foreach($member->jobs as $jobs)
// just display if partner | socio
@if ($jobs->slug== 'socio' || $jobs->slug == 'partner')
@foreach($member->profiles as $profile)
<li>
<a href = "/{!! str_slug(trans('global.words.lawyer_male'), '-') !!}/{!! $member->profile->full_name_slug !!}" title = "{!! $member->profile->full_name !!}"><img class = "avatar" src = "{{ asset('/images/staff/thumbs/'.$member->photos[3]->filename) }}" alt = "{!! $member->profile->full_name !!}"> {!! $member->profile->full_name !!}
</a>
</li>
@endforeach
@endif
@endforeach
@endforeach
</ul>
</li>
Надеюсь это поможет
Хотя я согласен, что это может вызвать проблемы, если он использует его без явного переопределения переменной $users, он ничего не делает. Также, если он это сделает, первый foreach должен работать, а $member->jobs должен выдать другую ошибку (вызов метода для не-объекта).
Laravel levaral, использовал предложенный вами код, но все еще получаю ошибку.
Похоже, что сейчас я получаю ошибку на @foreach($member->profile as $profile).
@McRui да вы правы @foreach ($ member-> profile as $ profile) генерирует ошибку
Я не уверен, почему это происходит. Попробуйте определить, какой именно
foreachвызывает эту ошибку. Но есть ли какая-то особая причина, по которой вы звоните в$team->jsonSerialize();? Я не думаю, что это что-то делает.