Laravel尝试检索模型ID但不起作用?

时间:2019-02-20 18:44:36

标签: php laravel

使用findOrFail方法($product = Product::findOrFail($id))时,我试图检索产品的ID。它成功找到了它,并且在回显产品的内容时,它看起来像这样:

{"id":1,"title":"Hoodie","description":"Lorem ipsum","price":"30","category":0,"images":1,"created_at":"2018-11-11 22:03:14","updated_at":"2018-11-11 22:03:14"}

因此,我将其保存到变量$ product中以访问变量。我可以呼叫$product->title,它显示为“ Hoodie”。但是,当我尝试调用$product->id时,它不会返回任何内容吗?

我不知道为什么会这样,所以任何帮助都会很棒!

Product类:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;

class Product extends Model
{
    use Searchable;

    //table name
    protected $table = 'products';
    //primary key
    public $primarykey = 'id';
    public $timestamps = true;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = ['title', 'description', 'price', 'category', 'images'];

    public function category()
    {
        return $this->belongsTo('App\Category', 'category', 'id');
    }

    public function image()
    {
        return $this->hasOne('App\Images', 'id', 'images');
    }
}

以及ProductsController的一部分:     

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\File;
use App\Product;

class ProductsController extends Controller
{
    public function destroy(Request $request)
    {
        $id = $request->input('product');
        $product = Product::findOrFail($id);
        die($product);
    }

2 个答案:

答案 0 :(得分:1)

我建议对产品进行类型提示并传入要销毁的对象,以便您拥有这样的RESTful资源:

public function destroy(Product $product, Request $request)
{
    $product->delete();
}

区别在于您不是通过表单提交ID,而是在您提交到的URL中传递ID。它仍然必须是带有CSRF令牌的帖子,但该表单不应要求ID包含数据字段。

答案 1 :(得分:0)

如果您正在使用资源route,则您的路线URL应该是这样

http://localhost:8000/product/ {id}

并且您的destroy方法应该只接收id而不是Request $request,因此您必须更改自己的destroy方法

public function destroy($id){
   $product = Product::findOrfail($id);
   $product->delete();
   return view('view.name',compact('product'));
}