首页 > 解决方案 > 试图获取“名称”非对象的属性

问题描述

我的模型:

class Product extends Model
{
    protected $table = 'Products';
    protected $fillable = ['product-code', 'type', 'name', 'description', 'price', 'discount', 'image', 'image_alt'];

    public function products()
    {
        return $this->hasMany('App\ProductSpecifics');
    }
}

控制器:

public function find_product(Request $request)
{
    $this->validate($request, [
        'code' => 'required|max:50|string'
    ]);
    $Product = Product::where('product-code', '=', $request->get('code'))->first();
    if(strlen($Product->name > 0))
    {
        return view('edit_product', compact('Product'));
    }
    return redirect()->route('edit_product')->with('fail', 'Failed to find the product.');
}

形式:

            <form action="{{route('find_product')}}" method="post">
                <div class="form-group">
                    <label for="name" class="control-label">Product Code</label>
                    <input class="form-control" name="code" id="product_code" type="text" placeholder="Enter product code...">
                </div>
                @error('code')
                <div class="alert alert-danger">{{ $message }}</div>
                @enderror
                <div class="form-group">
                    <button type="submit" class="btn btn-primary float-lg-right">Search for product</button>
                </div>
                {{ csrf_field() }}
            </form>

每当我提交表单时,我都会收到“尝试获取非对象的属性'名称'”,我做错了什么?我的控制器中确实包含应用程序/产品。

编辑: 添加“dd($Product);” 我的控制器为我提供了“null”作为答案。

标签: phplaravel

解决方案


回答你的问题。

$product = Product::where('product-code', $request->get('code'))->first(); // remove '='
if($product) // if the product with given code is not found then the $product would be null
{
    return view('edit_product', compact('product'));
}
return redirect()->route('edit_product')->with('fail', 'Failed to find the product.');

您的代码中仍然存在许多编码标准问题。我建议通过Laravel 最佳实践


推荐阅读