Сделайте продукт доступным для покупки только один раз

Привет, ребята, я пытаюсь создать продукт, который можно купить только один раз, так что я делаю это

productsTable: id,name,desc,price,onlyOnce(Boolean 0-1)

И я тоже делаю сводную таблицу: orders: user_id,product_id

Я пробую этот код:

public function showProducts(Category $category, User $user) {

    $products = $category->products()->where('onlyOnce', 1)->pluck('id')->toArray();
    $userOrders = $user->orders()->pluck('user_Id')->toArray();
    $missProducts = array_intersect($userOrders, $products);


    $extras = $category->products()->whereNotIn('id', $missProducts)->get();


    return view('products.category',compact('extras'));
}

Но не работает, есть идеи, как это сделать?

(Если вам нужны вот мои модели) Product.php

 class Product extends Model
 {
  protected $fillable = [];

/**
 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
 */
public function categories() {
   return $this->belongsToMany(Category::class);
}

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

}

Order.php

class Order extends Model
{
/**
 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
 */
public function user()
{
    return $this->belongsTo(User::class);
}

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

/**
 * @return int
 */
public function getTotalPrice() {

    $orders = self::with('product')->get();
    $total = $orders->pluck('product')->sum('price');

    return $total;
}

}

User.php класс User расширяет Authenticatable {

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = ['name'];

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

}

С этим кодом он возвращает пустой массив, я не знаю почему, поэтому, пожалуйста, если у вас есть идеи, как я могу это исправить или какой новый код набрать ответ! Спасибо в совет, мир! ;)

Вы пересекаете идентификатор пользователя с идентификатором продукта? Можете ли вы объяснить, для чего предназначен код вашего контроллера, то есть для получения единовременных продуктов, купленных пользователем, или просто для исключения продуктов, которые выпускаются только один раз и т. д.?

Rwd 14.07.2018 12:45

Я хочу показать товары, которые пользователь не купил.

Lubomir Stankov 14.07.2018 13:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы настроили свою базу данных как-то странно, я бы сделал это по-другому, однако следующий код должен извлекать все продукты, не купленные пользователем. Сообщите мне, если это сработает.

$productID = 123;
$userID = 10;
$purchased = $orders->select('product_id')->where('user_id', $userID)->toArray();

$notPurchased = $productsTable->whereNotIn('id',$purchased)->get();

Затем вы можете передать $ notPurchased представлению и перебрать его с помощью цикла foreach (), чтобы получить идентификатор каждого непроданного продукта.

Другие вопросы по теме