boldsinas101
boldsinas101

Reputation: 330

Undefined variable issue Laravel 5.4

I've got stuck with this error so if ever pls forgive me because I'm still new at laravel. I got this error

Undefined variable: clientTransactions (View: C:\xampp\htdocs\dcgwapo\resources\views\service_details\create.blade.php)

but I have a right code but I still wondering why it is still undefined variable given I define it in my controller.

create.blade.php in service details code

<div class="form-group">
    <label for="client_transaction_id">Client Trans ID: </label>
    <select class="form-control" name="client_transaction_id">
        @foreach ($clientTransactions as $clientTransaction)
            <option value= "{{ $clientTransaction->id }}">
              {{ $clientTransaction->id }}
            </option>
        @endforeach
    </select>
  </div>

ServiceDetailsController code

public function create()
{
    $users = User::pluck('fname', 'lname', 'id');
    $services = Service::pluck('name', 'id');
    $clientTransactions = ClientTransaction::all();
    return view('service_details.create', ['users' => User::all()], ['services' => Service::all()], ['clientTransactions' => ClientTransaction::all()]);
}

ServiceDetail.php model code

public function clientTransaction()
{
  return $this->belongsTo(ClientTransaction::class);
}

I hope you can help me. Thanks!

Upvotes: 0

Views: 1082

Answers (3)

user8824269
user8824269

Reputation:

You can use compact to pass data from controller to view:



        public function create()
        {
            $users = User::pluck('fname', 'lname', 'id');
            $services = Service::pluck('name', 'id');
            $clientTransactions = ClientTransaction::all();
            return view('service_details.create',compact('users','services','clientTransactions');
        } 

Upvotes: 0

Ruman
Ruman

Reputation: 191

Second parameter to view function accepts an associative array of data, you are passing an indexedArray of arrays, Just use this return statement and you are good to go. ;)

    return view('service_details.create', [
        'users' => User::all(),
        'services' => Service::all(),
        'clientTransactions' => ClientTransaction::all()
    ]); 

Upvotes: 0

Marwelln
Marwelln

Reputation: 29443

You're sending variables to your view the wrong way. The seconds argument should be an array with all your variables. As of now your adding a new parameter to the view function for each variable.

view('view', [...], [...], [...])

It should be like this:

view('view', [...1, ...2, ...3])

So what you need to change is the return statement to this:

return view('service_details.create', ['users' => User::all(), 'services' => Service::all(), 'clientTransactions' => ClientTransaction::all()]);

Upvotes: 6

Related Questions