Laravel如何在单个视图中从两张表分别填充两个下拉框
Got it, let's sort this out. The problem with your current setup is that your two controller methods each only pass one dataset to the books view. If you access the route for getCarList, you'll only have $carsList available (and $clientsList will be undefined), and vice versa for getClientList. To get both dropdowns working in the same view, you need to fetch both datasets in a single controller method and pass them together to the view.
Step 1: Update Your Controller (or Create a New One)
You can either modify an existing controller or create a dedicated controller for this view. For example, let's create a BooksController (or use one of your existing controllers) with a method that fetches both car and client data:
// app/Http/Controllers/BooksController.php namespace App\Http\Controllers; use App\Models\Car; use App\Models\Client; class BooksController extends Controller { public function showForm() { // Fetch all cars and clients from their respective tables $carsList = Car::all(); $clientsList = Client::all(); // Pass both datasets to the view return view('adminlte::books', compact('carsList', 'clientsList')); } }
If you prefer to use one of your existing controllers (like CarsController), you can adjust its method instead:
// app/Http/Controllers/CarsController.php public function getCarList() { $carsList = Car::all(); $clientsList = Client::all(); // Add this line to fetch client data return view('adminlte::books', compact('carsList', 'clientsList')); }
Step 2: Set Up the Route
Make sure your route points to the updated controller method so users can access the view with both datasets:
// routes/web.php use App\Http\Controllers\BooksController; Route::get('/books/form', [BooksController::class, 'showForm'])->name('books.form');
Step 3: Update the Blade View
Now in your book.blade.php file, you can render both dropdowns by looping over the two datasets. Here's an example tailored to AdminLTE's styling:
<div class="row"> <div class="col-md-6"> <div class="form-group"> <label for="car-select">Select a Car</label> <select id="car-select" class="form-control"> <option value="">-- Choose a car --</option> @foreach($carsList as $car) <option value="{{ $car->id }}">{{ $car->name }}</option> @endforeach </select> </div> </div> <div class="col-md-6"> <div class="form-group"> <label for="client-select">Select a Client</label> <select id="client-select" class="form-control"> <option value="">-- Choose a client --</option> @foreach($clientsList as $client) <option value="{{ $client->id }}">{{ $client->name }}</option> @endforeach </select> </div> </div> </div>
Quick Tips:
- Replace
$car->nameand$client->namewith the actual column names from your database tables (e.g.,$car->modelor$client->full_name). - The empty default option (
-- Choose a car --) improves user experience by preventing accidental selections. - If you hit an "undefined variable" error, double-check that both
$carsListand$clientsListare being passed correctly from the controller method.
内容的提问来源于stack exchange,提问作者Arbnor

