В моем индексе неожиданно появилось сообщение «Попытка получить свойство не-объекта» после выполнения редактирования и создания блейда - PullRequest
0 голосов
/ 09 февраля 2019

Спасибо, ребята, что помогли мне в прошлый раз.проблема, с которой я сейчас сталкиваюсь, связана с моим лезвием обзора.Этот index.blade полностью работает, прежде чем я создаю, редактирую и создаю блейд.После того, как я закончил два других блейда, я заметил, что index.blade теперь имеет Пытается получить свойство необъекта

, что я пытаюсь сделать, это отобразить категорию вТаблица продуктов.

Таблица продуктов идентификатор, имя, категории_идентификатора Таблица категорий идентификатор, имя

Продукты Модель

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Products extends Model
{
    use SoftDeletes;
    protected $fillable = [
        'product_code',
        'name',
        'categories_id',
        'wh1_limit_warning',
        'wh2_limit_warning',
        'price',
        'selling_price',
        'user_id'
    ];

    protected $dates = ['deleted_at'];

    public function category() {
        // return $this->belongsTo(Categories::class);
        return $this->belongsTo('App\Categories', 'categories_id', 'id');
    }
}

Категории Модель

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Categories extends Model
{
    protected $fillable = ['name'];
    public function Products()
    {
        // return $this->hasMany(Products::class);
        return $this->hasMany('App\Products', 'categories_id');    
    }
}

Указательный клинок

<div class="panel-body">
                    <div class="result-set">
                        <table class="table table-bordered table-striped table-hover text-center" id="data-table">
                            <thead>
                            <tr>
                                <th class="col-md-1 text-center">Code</th>
                                <th class="col-md-2 text-center">Name</th>
                                <th class="col-md-2 text-center">Category</th>
                                <th class="col-md-1 text-center"><small>Warehouse 1<br/>Limit Warning</small></th>
                                <th class="col-md-1 text-center"><small>Warehouse 2<br/>Limit Warning<small></th>
                                <th class="col-md-1 text-center">Price</th>
                                <th class="col-md-1 text-center">Selling Price</th>
                                @can('update_product', 'delete_product')
                                <th class="text-center col-md-1 text-center">Actions</th>
                                @endcan
                            </tr>
                            </thead>
                            <tbody>
                            @foreach($products as $product)
                                <tr>
                                    <td>{{ $product->product_code }}</td>
                                    <td>{{ $product->name }}</td>
                                    <td><b>{{ $product->category->name }}</b></td>
                                    <td>{{ $product->wh1_limit_warning }}</td>
                                    <td>{{ $product->wh2_limit_warning }}</td>
                                    <td>{{ $product->price }}</td>
                                    <td>{{ $product->selling_price }}</td>
                                    @can('update_product')
                                    <td>
                                        <button data-toggle="tooltip" title="Update product" onclick="window.location='{{ route('products.edit', $product) }}'" name="edit" class="action-button edit">
                                        <i class="fas fa-edit"></i>
                                        </button>
                                        <form action="{{ route('products.delete', $product )}}" method="post">
                                            {{ csrf_field() }}
                                            {{ method_field('DELETE') }}
                                            <button data-toggle="tooltip" title="Delete product" type="submit" class="action-button delete" onclick="return confirm('Are you sure you want to delete this?');"><i class="fas fa-trash-alt"></i></button>
                                        </form>
                                    </td>
                                    @endcan
                                </tr>
                            @endforeach
                            </tbody>
                        </table>
                    </div>
                </div>
            </div>

Контроллер продуктов

<?php
namespace App\Http\Controllers;

use App\Products;
use App\Categories;
use Illuminate\Http\Request;

class ProductsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {

        $products = Products::with('category')->get();
        return view('products.index')->with('products',$products);

    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $products = Products::with('category')->get();
        $categories = Categories::get()->pluck('name','id');
        return view('products.create',compact('categories'))->with('products', $products);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $products = Products::create($request->only(
            'product_code',
            'name',
            'categories_id',
            'wh1_limit_warning',
            'wh2_limit_warning',
            'price',
            'selling_price',
            'user_id'
        ));

        $this->validate($request, [
            'product_code' => '',
            'name' => '',
            'categories_id' => 'required|integer',
            'wh1_limit_warning' => 'required|integer',
            'wh2_limit_warning' => 'required|integer',
            'price' => 'required|integer',
            'selling_price' => 'required|integer',
            'user_id' => 'required|integer', 
        ]);

        flash('New product added!');
        return redirect(route('products.index'));
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Products  $products
     * @return \Illuminate\Http\Response
     */
    public function show(Products $products)
    {

    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Products  $products
     * @return \Illuminate\Http\Response
     */
    public function edit(Products $product)
    {
        $products = Products::all();
        $categories = Categories::all('name','id');
        return view('products.edit',compact('product','categories'));

        //return view('products.edit',compact('product','categories'))->with('products', $products);
        // return view('products.edit', compact('product'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Products  $products
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Products $product)
    {
        $product->update($request->only(
            'product_code',
            'name',
            'categories_id',
            'wh1_limit_warning',
            'wh2_limit_warning',
            'price',
            'selling_price',
            'user_id'
        ));
        return redirect()->route('products.index');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Products  $products
     * @return \Illuminate\Http\Response
     */
    public function destroy(Products $product)
    {
        $product->delete();
        return redirect(route('products.index'));
    }
}

Я не вижу, где я ошибся, потому что я ничего не изменил в public function index () моего контроллера.Опять же, РЕДАКТИРОВАТЬ и Создать работает, я смог отобразить категории в выпадающем списке без каких-либо проблем, только этот index.blade.

Пожалуйста, посмотрите этот скриншот проблемы

Заранее большое спасибо!

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Кажется, будет продукт, который не имеет никакой категории.Таким образом, этот продукт не будет связан ни с одной категорией, и у него не будет никакого объекта категории, поэтому он выдает эту ошибку.

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

<td><b>{{ $product->category ? $product->category->name : "" }}</b></td>
0 голосов
/ 09 февраля 2019

Я предполагаю, что ваш запрос возвращает массив вместо объекта.Попробуйте сбросить свой возврат, чтобы убедиться.

Если это массив, вы можете попробовать использовать [] вместо -> в вашем index.blade.php :

<td><b>{{ $product->category['name'] }}</b></td>
...