isset Şimdi dress_accessory şeklinde bir pivot tablonuz var diyelim. Bu BlongsToMany için gerekli ara tablo. Normalde şöyle olur:
+----------+--------------+
| dress_id | accessory_id |
+----------+--------------+
| 1 | 1 |
| 1 | 2 |
+----------+--------------+
Bu id'si 1 olan elbise id'leri 1 ve 2 olan aksesuarlar ile ilişkili/uyumlu demektir. Şimdi bu kullanıcıdan bağımsız bir ilişki, elbisenin sahibi belli değil. Sizin istediğiniz ise bir kullanıcının sahip olduğu elbisenin aksesuarlar ile ilişkisi. Çünkü siz bir elbise ile aksesuarları ilişkilendireceksiniz ve o elbiseyi bir kullanıcıya vereceksiniz. Başka bir kullanıcı o elbiseye farklı aksesuarlar ile sahip olabilir. Bu durumda işin içinde kullanıcıyı da katmanız lazım. Bu da pivot tabloya user_id eklemek:
+---------+----------+--------------+
| user_id | dress_id | accessory_id |
+---------+----------+--------------+
| 5 | 1 | 1 |
| 5 | 1 | 2 |
| 6 | 1 | 7 |
+---------+----------+--------------+
Bu tabloya göre id'si 5 olan kullanıcı id'si 1 olan elbiseyi 1 ve 2 id'li aksesuar ile kullanırken id'si 6 olan kullanıcı aynı elbiseyi sadece id'si 7 olan aksesuar ile kullanıyor. Burada user_id pivot alan olmuş oluyor. Siz şu ilişkileri kuracaksınız:
User HasOne Dress
Dress BelongsToMany Accessory
BelongsToMany ilişkisine user_id'yi de dahil edeceksiniz:
app/Models/Dress.php:
public function accessories(): BelongsToMany
{
return $this->belongsToMany(Accessory::class)
->withPivot('user_id');
}
Eğer $user giriş yapmış elbise sahibi ise $user->dress->accessories
sorgusu size yanlış sonuç verecektir çünkü içinde id'si 7 olan aksesuar da gelecek. Onun için şöyle yapılabilir:
User:5 olmak üzere;
$dress = $user->dress;
$dress->accessories
->pluck('id'); // [1, 2, 7]
$dress->accessories
->where('user_id', $user->id)
->pluck('id'); // [1, 2]
Farklı yollar da var ama onlar daha kompleks işlemlere girmek demek olduğu için şimdilik size bu çözüm olabilir.
Kurs konusunda bilgim yok.