Вызов неопределенного метода App \\ Repositories \\ WishlistRepository :: firstOrFail () - PullRequest
1 голос
/ 18 февраля 2020

Я хочу добавить список желаний на свой сайт, поэтому для этого я написал код, который указан ниже. Теперь, когда я проверяю, есть ли продукт в списке пожеланий, и если он есть в списке, удалите его. Итак, для этого я написал, который указан внутри функции isAlreadyListed в WishlistRepository:

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

, тогда я получаю следующую ошибку:

Вызов неопределенного метода App \ Repositories \ WishlistRepository :: firstOrFail ()

WishlistRepository

<?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);
     }
}

1 Ответ

0 голосов
/ 18 февраля 2020

Вы вызываете firstOrFail() в классе репозитория, вместо этого вы должны вызывать его в указанной вами модели.

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