首页 > 解决方案 > 调用未定义的方法 App\\Repositories\\WishlistRepository::firstOrFail()

问题描述

我想在我的网站中提供愿望清单功能,因此我编写了下面列出的代码。现在,当我检查产品是否已在愿望清单表中列出时,如果它被列入愿望清单,则将其删除。因此,为此我写了在 WishlistRepository 的 isAlreadyListed 函数中列出的内容:

return $this->firstOrFail()->where('product_id', $p_id)->where('user_id',$u_id); 

然后我收到以下错误:

调用未定义的方法 App\Repositories\WishlistRepository::firstOrFail()

愿望清单存储库

<?php
        namespace App\Repositories;

        use App\Models\Wishlist;
        use App\Traits\UploadAble;
        use Illuminate\Http\UploadedFile;
        use App\Contracts\WishlistContract;
        use Illuminate\Database\QueryException;
        use Illuminate\Database\Eloquent\ModelNotFoundException;
        use Doctrine\Instantiator\Exception\InvalidArgumentException;

        /**
         * Class WishlistRepository
         *
         * @package \App\Repositories
         */
        class WishlistRepository extends BaseRepository implements WishlistContract
        {
            use UploadAble;
            public function __construct(Wishlist $model)
        {
            parent::__construct($model);
            $this->model = $model;
        }

        public function listWishlist(string $order = 'id', string $sort = 'desc', array $columns = ['*'])
        {
            return $this->all($columns, $order, $sort);
        }


            public function addToWishlist(array $params)
            {
                try {
                    if($this->isAlreadyWishlisted($params['product_id'], $params['user_id']))
                    {
                        $this->removefromWishlist($params);
                    }
                    else
                    {
                        $wishlist = new Wishlist($params);
                        $wishlist->save();
                        return $wishlist;
                    }

                } catch (QueryException $exception) {
                    throw new InvalidArgumentException($exception->getMessage());
                }
            }

            public function removefromWishlist($params)
            {
                $wishlist = $this->isAlreadyWishlisted($params['product_id'],$params['user_id']);

                $wishlist->delete();

                return $wishlist;
            }

            public function isAlreadyWishlisted(int $p_id,int $u_id)
            {
                try {
               return $this->firstOrFail()->where('product_id', $p_id)->where('user_id',$u_id);
                } catch (ModelNotFoundException $e) {

                    throw new ModelNotFoundException($e);
                }

            }
        }
        ?>

型号(愿望清单):

<?php

namespace App\Models;
use Illuminate\Support\Str;
use Illuminate\Database\Eloquent\Model;

class wishlist extends Model
{
    /**
     * @var string
     */
    protected $table = "wishlists";

    /**
     * @var array
     */
    protected $fillable = [
        'product_id', 'user_id'
    ];

    public function user(){
        return $this->belongsTo(User::class);
     }

     public function product(){
        return $this->belongsTo(Product::class);
     }
}

标签: laravellaravel-5eloquent

解决方案


您正在调用firstOrFail()存储库类,而是应该在您指定的模型上调用它。

return $this->model->firstOrFail()->where('product_id', $p_id)->where('user_id',$u_id);

推荐阅读