Laravel Eloquent ile many-to-many ilişkileri kullanarak bir tablo örneğiyle devam edelim. Birçok kullanıcının birçok siteye erişebileceği bir senaryo düşünelim. Bu ilişkiyi kurmak için iki tabloya ihtiyacınız olacak: users
ve sites
. Ayrıca bir bağlantı tablosu (user_site
) kullanarak bu ilişkiyi kurmalısınız.
users
tablosunu oluşturun ve bir kullanıcıyı temsil eden verileri içerir.
sites
tablosunu oluşturun ve her bir siteyi temsil eden verileri içerir.
Bağlantı tablosunu (user_site
) oluşturun. Bu tablo, kullanıcıların hangi sitelere erişebileceğini belirlemek için kullanılır. Aşağıda, bu tabloyu oluşturmak için bir migration örneği verilmiştir:
php artisan make:migration create_user_site_table
Daha sonra oluşturulan migration dosyasını açın ve aşağıdaki gibi düzenleyin:
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUserSiteTable extends Migration
{
public function up()
{
Schema::create('user_site', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->unsignedBigInteger('site_id');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users');
$table->foreign('site_id')->references('id')->on('sites');
});
}
public function down()
{
Schema::dropIfExists('user_site');
}
}
Bu migration, user_site
adlı bağlantı tablosunu oluşturur ve user_id
ve site_id
sütunlarını ilişkilendirir.
- Eloquent modelini oluşturun. İlk olarak
User
modelini aşağıdaki gibi güncelleyin:
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public function sites()
{
return $this->belongsToMany(Site::class);
}
}
Sonra Site
modelini oluşturun:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Site extends Model
{
public function users()
{
return $this->belongsToMany(User::class);
}
}
- Artık kullanıcıları ve siteleri ilişkilendirebilirsiniz. Örneğin, belirli bir kullanıcının hangi sitelere erişebileceğini kontrol etmek için şu kodu kullanabilirsiniz:
$user = User::find(1); // Kullanıcıyı id'ye göre alın
$sites = $user->sites; // Kullanıcının erişebileceği siteleri alın
foreach ($sites as $site) {
echo $site->name; // Site adını ekrana yazdırın
}
Bu şekilde, many-to-many ilişkileri kullanarak kullanıcıları ve siteleri bağlayabilir ve belirli bir kullanıcının hangi sitelere erişebileceğini kolayca kontrol edebilirsiniz.
Eğer belirli bir kullanıcının 123 numaralı bir site kaydının olup olmadığını sorgulamak istiyorsanız, Eloquent ile bu sorguyu aşağıdaki gibi yapabilirsiniz:
$userId = 1; // Kullanıcının ID'sini belirli bir değere ayarlayın
$siteIdToCheck = 123; // Sorgulanacak site ID'sini belirli bir değere ayarlayın
$user = User::find($userId);
if ($user) {
// Kullanıcı bulundu
$siteExists = $user->sites()->where('site_id', $siteIdToCheck)->exists();
if ($siteExists) {
// Kullanıcının 123 numaralı site kaydı var
echo "Kullanıcının 123 numaralı site kaydı var.";
} else {
// Kullanıcının 123 numaralı site kaydı yok
echo "Kullanıcının 123 numaralı site kaydı yok.";
}
} else {
// Kullanıcı bulunamadı
echo "Kullanıcı bulunamadı.";
}
Yukarıdaki kod parçası, belirli bir kullanıcının 123 numaralı site kaydının olup olmadığını sorgular. exists()
yöntemi, belirli bir koşula sahip kayıtların varlığını kontrol etmek için kullanılır. Eğer kullanıcı bulunursa ve 123 numaralı site kaydı varsa, ilgili mesajlar ekrana yazdırılır. Eğer kullanıcı bulunamazsa da bu durumu kontrol ediyoruz.