1

我是 laravel 的新手,我正面临一个痛苦的问题。

我在我的电子商务 api 中使用Crinsane/LaravelShoppingcart,我试图在 vuejs 中使用 axios 发送一个发布请求,通过发送产品 ID 和数量将产品添加到购物车。问题是 id 和数量没有到达应用程序,尽管我很确定我在 axios 中指定了正确的路由链接并且我得到“没有模型 [App\Product] 的查询结果”。我假设这意味着处理请求的控制器功能正在工作,但 id 没有被发送/转换到资源集合。我不知道问题出在我正在使用的包还是代码或其他问题上。

这是 axios 请求


   addCart(item) {
                 axios
                 .post('/api/cart/add', item)
                 .then(response => (response.data.data))
                 .catch(error => console.log(error.response.data))

这是路线:

Route::post('cart/add', [
  'uses' =>  'ShoppingController@store',
  'as' => 'cart.add'
]);

这是购物车集合

  public function toArray($request)
    {
      return [
        'id' => $this->id,
        'qty' => $this->qty
      ];
    }

这是控制器

    public function store(){

      $pdt = Product::findOrFail(request()->id);
      
      $cart = Cart::add([
        'id' => $pdt->id,
        'name' => $pdt->name,
        'qty' => request()->qty,
        'price' => $pdt->price
      ]);

这是产品型号

class Product extends Model
{
    protected $fillable = [
      'name', 'description', 'image', 'category', 'quantity', 'price', 'sold','remaining','rating', 'bestSelling', 'featured'
    ];

}

先感谢您

4

2 回答 2

0

问题似乎出在您的控制器中。

文档

要通过依赖注入获取当前 HTTP 请求的实例,您应该Illuminate\Http\Request在控制器方法上对类进行类型提示。

尝试这个:

public function store(Request, $request){
      // Make sure the 'id' exists in the request
      if ($request->get('id')) {
        $pdt = Product::find($request->get('id'));

        if ($request->get('qty')) {
          $qty = $request->get('qty')
        }

        $cart = Cart::add([
          'id' => $pdt->id,
          'name' => $pdt->name,
          'qty' => $qty,
          'price' => $pdt->price
        ]);
      }

然后,在控制器的顶部,添加:

use Illuminate\Http\Request;
于 2020-07-22T09:56:02.937 回答
0

所以我发现它需要一个 json 对象才能工作,我不得不把这段代码放在 store 方法的末尾:

return response()->json(['cart' => $cart], 201);
于 2020-07-24T03:08:10.917 回答