Laravel неопределенная переменная проблема - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь получить данные из базы данных и распечатать их, используя foreach l oop, но у меня есть неопределенная ошибка переменной.

В моей сети. php У меня есть

Route::get('/ShowProducts' , 'ProductController@ShowProducts');

Это мой код в контроллере

function ShowProducts(){
    $show = ProductModel::where('ID')->get();

    $show->Product_Name;
    $show->Count;
    $show->Price;

    return view('profile');
}

Ответы [ 6 ]

3 голосов
/ 28 февраля 2020

У вас нет аргумента $id в вашей функции, если вы хотите перечислить все продукты, используйте это:

function ShowProducts() {
   $products = ProductModel::all();
   return view('profile', ['products' => $products]);
}

и на вашем блейде:

@foreach($products as $prod)
    <h3 class="product-title">
        <a href="product.html">{{$prod->Product_Name}}</a>
    </h3>
@endforeach

Если вы хотите показать один продукт, добавьте новый маршрут с {id}:

Route::get('/ShowProducts/{id}' , 'ProductController@ShowProduct');

и на вашем контроллере:

function ShowProduct($id) {
   $product = ProductModel::findOrFail($id);
   return view('profile', ['product' => $product]);
}
1 голос
/ 28 февраля 2020

Вы должны передать переменную в поле зрения. Вы не сделали этого, поэтому получили ошибку undefined variable.

Существует много методов для передачи переменных в представление.

Using array directly in view method
return view('welcome', ['variable_name' => $variable_value]);
Using with method
return view('welcome')->with('variable_name', $variable_value);
Using with method shortcut
return view('welcome')->withVar($variable_value);
// laravel parses 'withVariable' method name then extracts variable name and you will get variable called 'var' in your blade file
Using php's compact function
// It is more clear and readable to use compact if you are not doing conditionals and etc
$var1 = 'val1';
$var2 = 'val2';
return view('welcome', compact('var1', 'var2'));
// Compact methods gets variable name by string and retuns associative array with 'name' => 'value' signature

Я обычно использую первый и последний методы

Надеюсь, это поможет вам

1 голос
/ 28 февраля 2020

создайте свой код, как показано ниже.

код контроллера .

function ShowProducts(){
    $products = ProductModel::all();
    return view('profile', compact('products'));
}

profile.blade. php file.

@if(!empty($products))
@foreach($products as $product)
 {{ $product->Product_Name }}
@endforeach
@endif
1 голос
/ 28 февраля 2020

В этом коде довольно много странных вещей:

$show = ProductModel::where('ID')->get();

Этот запрос не сравнивает никакие значения. Вам нужно правильное предложение where, например:

ProductModel::where('ID','=',$id)->get(); //ID is the AI column in your database, make sure you used capital letters for that.

Далее присваивается ваша переменная. В laravel get используется для возврата коллекции записей. В вашем случае вам нужно что-то вроде first(), так как вы фильтруете по id.

 ProductModel::where('ID','=',$id)->first();

Тогда вы сможете назначать значения, как вы пытались, но в вашем коде:

$show->Product_Name;
$show->Count;
$show->Price;

Эти поля в настоящее время undefined, потому что там есть вложенный массив с ключом [0], потому что вы возвращаете только 1 запись, конечно. Вот как работает get(). Так что вместо этого, как я упоминал выше, используйте first() для этой задачи.

1 голос
/ 28 февраля 2020

во-первых, где находится фактический ID, который вы ищете?

во-вторых, для чего $show->Product_Name;?

в-третьих, go для laracasts.com и следуйте некоторым учебникам. Функция, которую вы ищете:

Route::get('/ShowProducts/{id}' , 'ProductController@ShowProducts');

function ShowProducts($id){
    $show = ProductModel::find($id);
    return view('profile', compact('show'));
}
1 голос
/ 28 февраля 2020

Здравствуйте, это нормально, потому что вы не передаете переменную в ваше представление.

 function ShowProducts(){
   $show = ProductModel::where('ID')->get();
   return view('profile', compact('show'));
}

Теперь просто используйте $ show в своем блейде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...