dsmndhm Şöyle bir tabloya kayıt eklemek istiyorsunuz:
+----------+------------+----------------+
| offer_id | product_id | description |
+----------+------------+----------------+
| 1 | 1 | Lorem ipsum |
| 1 | 2 | Dolor sit amet |
+----------+------------+----------------+
Gördüğünüz gibi her satırda bir offer_id, product_id ve description alanı var. Şimdi siz diyorsunuz ki
dsmndhm product_id ' de array geliyor ama onda herhangi bir hata almıyorum
product_id array geliyor. Mesela [1, 2]. Her satırda her alandan bir tane var dedim üstte. Şimdi şöyle yapmışsınız:
$offer->getProduct()->attach($product_id, ['description' => $description]);
Burada offer_id ilişkiden otomatik geliyor, her satıra eklenecek. Şimdi soruyorum size, her satırda bir kayıt olacaksa ve her satırda tüm alanlara ihtiyaç olacaksa, product_id [1, 2] şeklinde iki kayıt ise description alanı neden tek? Her satır için bir tane de description olması gerekmiyor mu? Dökümanda örnek var demiştim, örneğe bakın:
$user->roles()->attach([
1 => ['expires' => $expires], // 1. satır
2 => ['expires' => $expires], // 2. satır
]);
yani sizin yapmanız gereken:
$attachData = [];
foreach($request->input('product_id') as $id) {
$attachData[$id] = [
'description' => $description
];
}
$offer->getProduct()
->attach($attachData);
Diğer bir konu da isimlendirmeler. Bu konu önemli; isimlendirme kod yazan adam ile yazılım geliştiriciyi ayıran bir farktır. getProduct demişsiniz mesela. Kurduğunuz ilişki BelongsToMany, yani çoğul ama ilişki ismi tekil. Tek bir ürün mü dönecek de adı getProducts değil de getProduct? Ayrıca ilişki isimleri eylem olmaz; isim olur. İlişkiye isim veriyorsunuz, yani getProduct ya da getProducts değil products ve offers olması gerekiyor. Aynı şekilde product_id değil, madem çoğul geliyor product_ids olacak.
Ezbere iş yapmayın, yazdığınız şeyi anlamaya çalışın ve dokümanları dikkatli okuyun.
Ayrıca $request->product_id
şeklinde kullanmayın, daima $request->input('product_id')
şeklinde olacak. Burada sebebini anlattım:
https://laravel.gen.tr/d/7044-request-kullanim-sekli