У меня есть это в моем контроллере:
public function detail($id) {
$data = DB::table('data_api')->where('id', $id)->get();
$carousel = DB::table('data_carousel')->where('data_api_id', $id)->get();
return view('detail', ['data_api' => $data]);
return view('detail', ['data_carousel' => $carousel]);
}
Но когда я пытаюсь повторить $carousel by {{ $carousel }}, он говорит, что не найден. Но $data работают отлично. Есть идеи?
Undefined variable: carousel (View: /mylaravelproject/resources/views/detail.blade.php)
Все то же самое: «Неопределенная переменная: data_carousel (View: /mylaravelproject/resources/views/detail.blade.php)»






вы возвращаете вид два раза, поэтому в поле зрения доступен только $data_api,
попробуй это
public function detail($id) {
$data = DB::table('data_api')->where('id', $id)->get();
$carousel = DB::table('data_carousel')->where('data_api_id', $id)->get();
return view('detail', ['data_api' => $data, 'data_carousel' => $carousel]);
}
вам нужно изменить оператор двойного возврата на одинарный возврат
return view('detail', ['data_api' => $data]);
return view('detail', ['data_carousel' => $carousel]);
к
return view('detail', ['data_api' => $data, 'data_carousel' => $carousel]);
Решено с помощью return view('detail', ['data_api' => $data, 'data_carousel' => $carousel]); и {{ $data_carousel }}. Спасибо
Обновлять:
public function detail($id) {
$data = DB::table('data_api')->where('id', $id)->get();
$carousel = DB::table('data_carousel')->where('data_api_id', $id)->get();
return view('detail', ['data_carousel' => $carousel,'data_api' => $data]);
}
Вы возвращаете два представления с одного и того же контроллера. После первого return выполнение кода останавливается и return второго просмотра не будет. Вот почему вы не можете получить параметры второго вида
Замените свой код следующим:
public function detail($id) {
$data = DB::table('data_api')->where('id', $id)->get();
$carousel = DB::table('data_carousel')->where('data_api_id', $id)->get();
return view('detail')->with('data_api', $data)->with('data_carousel', $carousel);
}
Вы не можете вернуться из функции два раза и ожидать, что оба действительно что-то вернут. После первого return выполнение функции останавливается.
Вместо этого попробуйте вернуть обе переменные одновременно:
return view('detail', [
'data_api' => $api,
'data_carousel' => $carousel
]);
Вам нужно вернуть вид, как показано ниже
public function detail($id) {
$data = DB::table('data_api')->where('id', $id)->get();
$carousel = DB::table('data_carousel')->where('data_api_id', $id)->get();
return view('detail', compact('data','carousel'));
}
Спасибо за ваш ответ. Мне любопытна разница в представлении возврата, которое я использую, и compact(), которое вы рекомендуете (я использовал его несколько раз, но я действительно не понимаю). Есть ссылки на это?
@abaykan Функция compact() создает массив из переменных и их значений. и их синтаксис такой compact(var1,var2...)
это реально сейчас работает? Вы говорите нам, что получаете
Undefined variable: carousel (View: /mylaravelproject/resources/views/detail.blade.php)
И вы получите это, потому что вы не передаете карусель переменных в свое представление, вы называете свои переменные как data_api и data_carousell
Во-вторых, вы должны передавать свои переменные как ассоциативный массив только в одном предложении, а не в двух вызовах вида, подобных этому.
return view('detail', ['carousel' => $carousel,'data' => $data]);
в моем случае я использую
@if (isset($users))
перед моим foreach, как в этом примере:
<div class = "form-group" id = "boardAdminUserIdCon">
<p><span class = "glyphicon glyphicon-briefcase" aria-hidden = "true"></span> مدیر بورد</p>
<select name = "boardAdminUserId" id = "boardAdminUserId" class = "form-control" required = "required">
<option value = "">{{ __('auth.CHOOSEYOURADMIN') }}...</option>
@if (isset($users))
@foreach($users as $user)
<option value = "{{ $user['id'] }}">{{ $user["name"] }}
</option>
@endforeach
@endif
</select>
</div>
попробуй
{{$data_carousel}}