Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在Laravel中建立产品和愿望列表模型之间的关系_Laravel_Laravel 5_Eloquent - Fatal编程技术网

无法在Laravel中建立产品和愿望列表模型之间的关系

无法在Laravel中建立产品和愿望列表模型之间的关系,laravel,laravel-5,eloquent,Laravel,Laravel 5,Eloquent,我正在从wishlist存储库获取数据,我在其中存储用户id和产品id。我正在获取此数据,但我希望从产品存储库获取产品id数据。我也在wishlist&product模型中建立了关系,但我无法从产品表获取数据。请帮我解决这个问题。 我正在从wishlist控制器获取数据 $wishlist = $this->wishlistRepository->listWishlist(); 产品型号: 产品表结构: 请共享产品和愿望列表列$this->all($columns,$order,

我正在从wishlist存储库获取数据,我在其中存储用户id和产品id。我正在获取此数据,但我希望从产品存储库获取产品id数据。我也在wishlist&product模型中建立了关系,但我无法从产品表获取数据。请帮我解决这个问题。 我正在从wishlist控制器获取数据

$wishlist  = $this->wishlistRepository->listWishlist();
产品型号:

产品表结构:


请共享产品和愿望列表列$this->all($columns,$order,$sort)替换为$this->model->all(……已尝试,但未检索到关系数据,即产品表。只有来自wishlist的数据存在
product\u wishlist
应与m:n相关。但在我的代码中,我没有从wishlist模型中获取数据,我是否必须更改这行代码返回$this->all($columns,$order,$sort);
<?php

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

class Product extends Model
{
    /**
     * @var string
     */
    protected $table = 'products';

    /**
     * @var array
     */
    protected $fillable = [
        'brand_id', 'sku', 'name', 'slug', 'description', 'quantity',
        'weight', 'price', 'sale_price', 'status', 'featured',
    ];

    /**
     * @var array
     */
    protected $casts = [
        'quantity'  =>  'integer',
        'brand_id'  =>  'integer',
        'status'    =>  'boolean',
        'featured'  =>  'boolean'
    ];

     /**
     * @param $value
     */
    public function setNameAttribute($value)
    {
        $this->attributes['name'] = $value;
        $this->attributes['slug'] = Str::slug($value);
    }


    /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function brand()
    {
        return $this->belongsTo(Brand::class);
    }

    /**
 * @return \Illuminate\Database\Eloquent\Relations\HasMany
 */
public function images()
{
    return $this->hasMany(ProductImage::class);
}

/**
 * @return \Illuminate\Database\Eloquent\Relations\HasMany
 */
public function attributes()
{
    return $this->hasMany(ProductAttribute::class);
}
/**
 * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
 */
public function categories()
{
    return $this->belongsToMany(Category::class, 'product_categories', 'product_id', 'category_id');
}

public function product_attributes()
{
    return  $this->belongsToMany(Attribute::class, 'product_attributes')->withPivot('value', 'quantity');
}

public function wishlist(){
    return $this->hasMany(Wishlist::class);
 }
}
<?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);
     }
}
<?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'])!=NULL)
            {
               $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->model->firstOrFail()->where('product_id', $p_id)->where('user_id',$u_id);
        } catch (ModelNotFoundException $e) {

            throw new ModelNotFoundException($e);
        }

    }
}
?>
<?php

namespace App\Repositories;

use App\Models\Product;
use App\Models\ProductImage;
use App\Traits\UploadAble;
use Illuminate\Http\UploadedFile;
use App\Contracts\ProductContract;
use Illuminate\Database\QueryException;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Doctrine\Instantiator\Exception\InvalidArgumentException;

/**
 * Class ProductRepository
 *
 * @package \App\Repositories
 */
class ProductRepository extends BaseRepository implements ProductContract
{
    use UploadAble;

    /**
     * ProductRepository constructor.
     * @param Product $model
     */
    public function __construct(Product $model)
    {
        parent::__construct($model);
        $this->model = $model;
    }

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

    /**
     * @param int $id
     * @return mixed
     * @throws ModelNotFoundException
     */
    public function findProductById(int $id)
    {
        try {
            return $this->findOneOrFail($id);

        } catch (ModelNotFoundException $e) {

            throw new ModelNotFoundException($e);
        }

    }

    /**
     * @param array $params
     * @return Product|mixed
     */
    public function createProduct(array $params)
    {
        try {
            $collection = collect($params);

            $featured = $collection->has('featured') ? 1 : 0;
            $status = $collection->has('status') ? 1 : 0;

            $merge = $collection->merge(compact('status', 'featured'));

            $product = new Product($merge->all());

            $product->save();

            if ($collection->has('categories')) {
                $product->categories()->sync($params['categories']);
            }
            return $product;

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

    /**
     * @param array $params
     * @return mixed
     */
    public function updateProduct(array $params)
    {
        $product = $this->findProductById($params['product_id']);

        $collection = collect($params)->except('_token');

        $featured = $collection->has('featured') ? 1 : 0;
        $status = $collection->has('status') ? 1 : 0;

        $merge = $collection->merge(compact('status', 'featured'));

        $product->update($merge->all());

        if ($collection->has('categories')) {
            $product->categories()->sync($params['categories']);
        }

        return $product;
    }

    /**
     * @param $id
     * @return bool|mixed
     */
    public function deleteProduct($id)
    {
        $product = $this->findProductById($id);

        $product->delete();

        return $product;
    }  

    /**
 * @param $slug
 * @return mixed
 */
    public function findProductBySlug($slug)
    {
    $product = Product::with('product_attributes')->where('slug', $slug)->first();

    return $product;
    }

      /**
 * @param $slug
 * @return mixed
 */
public function listFeaturedProduct()
{
$product = Product::with('images')->where('featured', 1)->get();

return $product;
}

/*public function getProductAttributes($id)
{
    return Category->find($id); 
} */

}
?>
<?php

namespace App\Http\Controllers\Site;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Contracts\WishlistContract;

class WishlistController extends Controller
{
    protected $wishlistRepository;

    public function __construct(WishlistContract $wishlistRepository)
    {
        $this->wishlistRepository = $wishlistRepository;
    }

    public function show()
    {
        $wishlist  = $this->wishlistRepository->listWishlist();

        dd($wishlist);
        return view('site.pages.wishlist', compact('wishlist'));
    }
}
id | product_id | user_id | created_at | updated_at
id | name | sku | quantity | brand_id | sale_price