Определите переменную, не объясненную - PullRequest
0 голосов
/ 06 октября 2019

Извините за тупой вопрос, но может кто-нибудь сказать, пожалуйста, как определить переменную в очень простых терминах? В течение нескольких месяцев я боролся с ошибками «неопределенная переменная». Переменные хранятся в config? Или, может быть, в routes?

у меня есть база данных с таблицей customers. Когда я помещаю это на мою домашнюю страницу просмотра {{$customers->name}}, я получаю Undefined variable: customers.

Отлично. Так как и где я могу определить переменную. Я бы подумал, что это определено, учитывая, что таблица базы данных буквально называется customers. Тьфу!

Файл моей модели Customer.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Customer extends Model
{
    protected $fillable = ['name', 'phone'];

    public function address()
    {
        return $this->hasOne(CustomerAddress::class);
    }

    public function purchases()
    {
        return $this->hasMany(CustomerPurchase::class);
    }
}

Ответы [ 2 ]

0 голосов
/ 06 октября 2019

Undefined variable означает, что переменная не существует, и причина для вашего случая заключается в том, что вы не передали ее в представлении.

Обычно для получения записей customers из базы данных в представленияхВы можете сделать это несколькими способами:

  1. Запросите его перед загрузкой своего представления, а затем передайте его своим представлениям:
//doing it in the controller

//create a controller: php artisan make:controller CustomerController

<?php

namespace App\Http\Controllers;

use Illuminate\Routing\Controller as BaseController;

use App\Customer;     //Dont forget to import your Customer model 

class CustomerController extends BaseController
{
    public function index()
    {
        $customers = Customer::get();   //this will fetch the customer using your mdoel

        return view('customer', ['customers' => $customers]);  //this will pass the records to the view
    }
}

//then in your routes/web.php:

Route::get('/customers', 'CustomerController@index'); //when you go to your application/customers in the browser, it will go to the controller and return the view with the records.

//OR you can skip the controllers and do it in the routes/web.php directly as what @jitesh jose mentioned.
Запрос прямо на ваш взгляд (Не очень рекомендуется, но иногда вам просто нужно заставить его работать)

В вашем customer.blade.php

@php
$customers = \App\Customer::get();
@endphp

<ul>
@foreach($customers as $customer)
    <li>{{$customer->name}}</li>
@endforeach
</ul>

Мой советпопробуйте посмотреть несколько основных видеороликов Laravel, чтобы вы поняли последовательность запросов и ответов.

0 голосов
/ 06 октября 2019

Если имя вашей модели Customer, laravel автоматически выберет имя таблицы как customers. В противном случае вы должны использовать желаемое имя таблицы в модели следующим образом.

 protected $table = 'customers_table';

В вашем web.php

 Route::get('/home',function () {
  $customers = DB::table('customers_table')->get();
  OR
  $customers = Customer::get();

  return view('welcome')->with('customers',$customers);
 });

Вы можете использовать $customers в welcome.blade.php как

 @foreach($customers as $customer)
  {{$customer->name}}
 @endforeach
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...