Есть модель корзины
Cart
и таблица
carts
, которая имеет вид:
| id | user_id |
|----|---------|
| 1 | 1 |
App/Models/Cart.php
<?php
namespace App\Models;
use App\Models\Product\ProductVariant;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\{BelongsToMany, HasOne};
class Cart extends Model
{
use HasFactory;
protected $fillable = [
'user_id',
];
public $timestamps = false;
public function items(): BelongsToMany
{
return $this->belongsToMany(CartProduct::class, 'cart_products');
}
}
Есть модель
CartProduct
и таблица
cart_products
| id | cart_id | product_variant_id | quantity | price |
|----|---------|--------------------|----------|-------|
| 1 | 1 | 1 | 5 | 1234 |
| 2 | 1 | 2 | 12 | 50332 |
App/Models/CartProduct.php
class CartProduct extends Model
{
use HasFactory;
protected $table = "cart_products";
public $timestamps = false;
protected $fillable = [
'product_variant_id',
'quantity'
];
public function product(): HasOne
{
return $this->hasOne(ProductVariant::class, 'id');
}
public function cart(): HasOne
{
return $this->hasOne(Cart::class);
}
}
При попытке получить корзину авторизованного пользователя вместе с товарами из такого eloquent-выражения:
$cart = Cart::where('user_id', Auth::id())->with('items')->first();
получаю следующую ошибку:
SQLSTATE[42712]: Duplicate alias: 7 ОШИБКА: имя таблицы "cart_products" указано больше одного раза
select "cart_products".*, "cart_products"."cart_id" as "pivot_cart_id", "cart_products"."cart_product_id" as "pivot_cart_product_id" from "cart_products" inner join "cart_products" on "cart_products"."id" = "cart_products"."cart_product_id" where "cart_products"."cart_id" in (1)
Не понимаю почему так происходит (хотя есть подозрение что это из-за того, что при описании релейшена items() в модели Cart, я указываю явно таблицу
cart_products
и в самой модели CartProduct у меня эта таблица явно указывается в
private $table = 'cart_products'
), но я просто хочу через отношение получить набор
id, cart_id, product_variant_id, quantity, price
. Если в отношении
items()
модели
Cart.php
убрать явное указание таблицы, то отношение будет пытаться работать с таблицей
cart_cart_products
, что совсем неверно. В чем может быть причина? Скорее всего допустил какую-то мелкую ошибку, которую не могу увидеть.