Привет, ребята, я пытаюсь создать продукт, который можно купить только один раз, так что я делаю это
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);
}
}
С этим кодом он возвращает пустой массив, я не знаю почему, поэтому, пожалуйста, если у вас есть идеи, как я могу это исправить или какой новый код набрать ответ! Спасибо в совет, мир! ;)
Я хочу показать товары, которые пользователь не купил.






Вы настроили свою базу данных как-то странно, я бы сделал это по-другому, однако следующий код должен извлекать все продукты, не купленные пользователем. Сообщите мне, если это сработает.
$productID = 123;
$userID = 10;
$purchased = $orders->select('product_id')->where('user_id', $userID)->toArray();
$notPurchased = $productsTable->whereNotIn('id',$purchased)->get();
Затем вы можете передать $ notPurchased представлению и перебрать его с помощью цикла foreach (), чтобы получить идентификатор каждого непроданного продукта.
Вы пересекаете идентификатор пользователя с идентификатором продукта? Можете ли вы объяснить, для чего предназначен код вашего контроллера, то есть для получения единовременных продуктов, купленных пользователем, или просто для исключения продуктов, которые выпускаются только один раз и т. д.?