使用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);
}
答案 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'));
}