Giriş yapmadınız.

#1 24.04.2019 10:19:04

dodiş
Üye
Yer: Mersin
Kayıtlı: 30.10.2017
Mesajlar: 46

Laravel ->withPivot kullanımı

Merhaba,
Laravel 5.8 dökümantasyonunu okudum fakat tam anlayamadım.
Örnek olarak;

By default, only the model keys will be present on the pivot object. If your pivot table contains extra attributes, you must specify them when defining the relationship:

return $this->belongsToMany('App\Role')->withPivot('column1', 'column2');

denilmiş fakat withPivot'un amacı nedir ? yani sadece bu iki sütunu çağır gibi bir şey mi ? yani

select * from

değil de

select id, name, status from

gibi mi ?

Çevrimdışı

#2 24.04.2019 11:15:37

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,702
Website

Yanıt: Laravel ->withPivot kullanımı

Öncelikle pivot ile kastedilen şeyi açıklayalım.

Bildiğiniz gibi bazı alanlar ile bir tabloyu birden fazla tablo ile ilişkilendirebiliyoruz. Örneğin users ve addresses şeklinde iki tablo olduğunu düşünün. addresses tablosunda kullanıcılara ait adresler tutuluyor. Bu tabloda yer alan user_id alanı ile iki tabloyu birbiri ile ilişkilendiriyoruz. Böylece kullanıcının adresine ulaşabiliyoruz. Bu tip ilişki one-to-many şeklinde geçiyor. Yalnız bu tip ilişkide şöyle bir durum var; bir adres sadece bir kullanıcıya ait olabiliyor. Peki biz kayıtların birden fazla kayıt ile ilişkisi olmasını istersek? Yani bir kaydın birden fazla sahibi olacaksa? Bunun en çok karşınıza çıkan örneği kategori - ürün ilişkisi olabilir. Bir ürünün birden fazla kategorisi olabiliyor. Bu durumda products tablosunda bir category_id alanı tutmak bizim işimize yaramayacaktır. Bu tip sorunu aşmak için kullanılan en yaygın yol ise ilişkiyi ayrı, 3. bir tabloda tutmaktır. İşte bu ilişkiyi tutan 3. tabloya (diğer iki tablo categories ve products olmuş oluyor) pivot tablo deniyor. . Bu ilişki many-to-many diye geçiyor ve Laravel'de belongsToMany() ile sağlanıyor.

Örneğin categories ve products tablosu için categories_has_products isimli bir pivot tablomuz olsun. Kabaca şöyle:

+-------------+-------------+
| category_id | products_id |
+-------------+-------------+
|           5 |           8 |
|           6 |           8 |
|          14 |           8 |
+-------------+-------------+

Ben bu tabloya baktığım zaman id'si 8 olan ürünün id'si 5, 6 ve 14 olan kategorilere ait olduğunu görüyorum. Bu ürünün bir notebook olduğunu düşünün. Bilgisayar, Dizüstü Bilgisayar ve Oyuncu Bilgisayarı kategorilerine aitmiş gibi düşünebilirsiniz.

Laravel açısından;

Bu iki alan model keys olarak geçer. Bu alanlara $product->pivot->category_id şeklinde ulaşabiliyorsunuz. belongsToMany() kullandığınızda ise sadece bu alanlara direk ulaşabilirsiniz. Burada 3. bir alan olsaydı ona ulaşmak için ulaşacağınız alanı withPivot ile belirtmeniz gerekiyor. Laravel'de belongsToMany ile yapılan sorgu size Collection objesi dönderir. Normal şartlarda bu obje içerisinde pivot objesi içerisinde bizim örneğe göre sadece category_id ve product_id barındırır. Biz 3. alanı withPivot ile belirttiğimizde o alan da pivot objesine dahil edilir. Yani:

+-------------+-------------+---------------------+
| category_id | products_id |     created_at      |
+-------------+-------------+---------------------+
|           5 |           8 | 2019-04-24 12:00:00 |
|           6 |           8 | 2019-04-24 12:00:00 |
|          14 |           8 | 2019-04-24 12:00:00 |
+-------------+-------------+---------------------+
$this->belongsToMany(...)->withPivot('created_at')
$product->pivot->created_at // 2019-04-24 12:00:00

Çevrimdışı

#3 24.04.2019 11:18:31

dodiş
Üye
Yer: Mersin
Kayıtlı: 30.10.2017
Mesajlar: 46

Yanıt: Laravel ->withPivot kullanımı

Valla hocam çok teşekkür ederim tane tane okudum anladım, emeğinize sağlık sağolun smile

Çevrimdışı

Forum alt kısmı