3 tablonuz olacak users (User modeli), interests (Interest modeli), user_interests.
user_interests pivot olacak, sadece user_id ve interest_id barındıracak.
Sonra User modeli ve Intreset modeli arasında belongsToMany ilişkisi kuracaksınız:
// User.php
public function interests()
{
return $this->belongsToMany(Interest::class, 'user_interests', 'user_id', 'interest_id');
}
Bu şekilde yapınca örneğin yeni oluşturulan bir kullanıcıya şu şekilde ilgi alanı ekleyebilirsiniz:
$user = User::create($request->all());
if ($request->has('interest')) {
$user->interests()->attach(array_keys($request->input('interest')));
}
Burada $request->input('interest') şu şekilde bir yapıda olmalı:
[
1 => "Pop",
2 => "Rock",
3 => "Klasik"
]
gibi. array_keys ile sadece id lerini alıyorum [1,2,3], attach ile kullanıyla ilişkilendiriyorum. Bu durumda user_interests tablosu otomatik olarak şu şekilde dolduruluyor:
+---------+-------------+
| user_id | interest_id |
+---------+-------------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
+---------+-------------+
Böylece kullanıcının ilgi alanlarına şu şekilde ulaşabilirsiniz:
$user = User::find(1);
$interests = $user->interests
Kullanıcıyı güncellerken ise ilgili alanlarını da güncellemek için:
// update yöntemi içinde
if ($request->has('interest')) {
$user->interests()->sync(array_keys($request->input('interest')));
} else {
$user->interests()->detach();
}
Bu ilgi alanlarını checbox ile listelediğinizi varsayarsak, kayıt oluşturma sayfasında
// $interests = Interest::all(); olmak üzere
@foreach($interests as $interest)
<label>
{!! Form::checkbox("interest[{$interest->id}]", $interest->id, false) !!} {{ $interest->name }}
</label>
@endforeach
Güncelleme sayfasında ise
// $interests = Interest::all(); olmak üzere
@foreach($interests as $interest)
<label>
{!! Form::checkbox("interest[{$interest->id}]", $interest->id, $user->interests->contains($interest->id)) !!} {{ $interest->name }}
</label>
@endforeach
Güncelleme sayfasında $user->interests->contains($interest->id) verilen ilgi alanı id sini pivot tabloda kontrol ediyor, varsa true yoksa false dönüyor. Böylece mevcut ilgi alanlarını işaretli olarak listeletebiliyoruz.
Ne yazık ki konu burada yazacak kadar kısa değil, çok şey var ama bu kadarından başlayarak öğrenebilirsiniz.