public function follows(): BelongsToMany
{
return $this->belongsToMany(User::class, 'follows', 'user_id', 'following_user_id')->withTimestamps();
}
Bu kadar kod yeterli oluyor , bunu kullanmak için ise ilgili fonksiyonda
auth()->user()->follows()->where şeklinde yapmak istediğimi yapıyorum . Buradan yola çıkarak aslında takipleşme yerine arkadaşlıkda yapılabilir düşüncesiyle araştıryorken bu forumda bir konuya denk geldim ve ilişkileri anlamadığımı farkettim .
Arkadaşlık sisteminde follow tablosundan farklı olarak yani friends tablosunda arkadaşlık isteklerinin kabul edilmesi
red edillmesi , bekliyor olması durumları olduğundan friends tablosunda
$table->boolean('status')->default(0);
yada
$table->timestamp('accepted_at')->nullable(); // Kabul edilme tarihi
bu ikisinden biri tercih edilerek tabloya dahil edilmesi gerekiyo
Şurdan alıntılıyorum
app/Models/Friend.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\Pivot;
class Friend extends Pivot
{
protected $table = 'friends';
const UPDATED_AT = null;
protected $casts = [
'accepted_at' => 'datetime'
];
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
public function friend(): BelongsTo
{
return $this->belongsTo(User::class, 'friend_id');
}
}
Friend Modele neden ihtiyacım olsunki
ve
public function friends(): BelongsToMany
{
return $this->belongsToMany(User::class, 'friends', 'user_id', 'friend_id')
->using(Friend::class)
->as('friendship')
->withPivot([
'accepted_at',
'created_at'
]);
}
->using(Friend::class) ı neden kullanayımki ?
return $this->belongsToMany(User::class, 'friends', 'user_id', 'friend_id')->withPivot('status') bu satır başlı başına işimi görüyor yani henüz denemedim ama göreceğine eminim , sadece şu yukardaki satır ile status değerini alabilirim ve bu değere göre bekleyen yada kabule edilmiş istekleri döndürebilirim
Friend adındaki modelin use Illuminate\Database\Eloquent\Relations\Pivot; ile genişletilmesi ve friend modelin içindeki şu belongsTo kullanımı işi uzatmak olmazmı ?