अध्याय 7: Laravel मॉडल और डेटाबेस (Laravel Model and Database)

अध्याय 7: Laravel मॉडल और डेटाबेस (Laravel Model and Database)

इस अध्याय में, हम Laravel के मॉडल और डेटाबेस के बारे में जानेंगे। मॉडल आपके एप्लिकेशन के डेटा और लॉजिक को परिभाषित और प्रबंधित करते हैं। Laravel का Eloquent ORM (Object-Relational Mapping) डेटाबेस ऑपरेशन्स को आसान और शक्तिशाली बनाता है। इस अध्याय में, हम मॉडल की उत्पत्ति, माइग्रेशन और सीडिंग, और Eloquent ORM की विभिन्न सुविधाओं को समझेंगे। यह ज्ञान आपको अपने एप्लिकेशन के डेटा को प्रभावी ढंग से प्रबंधित करने और जटिल डेटाबेस ऑपरेशन्स को सरल बनाने में मदद करेगा। आइए, Laravel मॉडल और डेटाबेस की इस रोमांचक यात्रा की शुरुआत करें।

मॉडल की उत्पत्ति (Creating Models)

Laravel में मॉडल आपके एप्लिकेशन के डेटा और लॉजिक को प्रबंधित करने के लिए उपयोग किए जाते हैं। मॉडल डेटाबेस टेबल्स को प्रस्तुत करते हैं और डेटाबेस ऑपरेशन्स को आसान बनाते हैं। Laravel का Eloquent ORM (Object-Relational Mapping) मॉडल्स के साथ काम करने के लिए एक सहज और शक्तिशाली इंटरफेस प्रदान करता है। आइए, हम Laravel में मॉडल बनाने के विभिन्न तरीकों को समझें।

1. मॉडल उत्पन्न करना (Generating a Model)

आप Artisan कमांड-लाइन टूल का उपयोग करके आसानी से एक नया मॉडल उत्पन्न कर सकते हैं। निम्नलिखित कमांड का उपयोग करें:

php artisan make:model Post
यह कमांड app/Models डायरेक्टरी में Post नाम का एक नया मॉडल बनाएगा। यदि app/Models डायरेक्टरी मौजूद नहीं है, तो यह मॉडल app डायरेक्टरी में उत्पन्न होगा।

2. मॉडल के साथ माइग्रेशन उत्पन्न करना (Generating a Model with Migration)

यदि आप एक मॉडल उत्पन्न करते समय उसके लिए एक माइग्रेशन फाइल भी बनाना चाहते हैं, तो निम्नलिखित कमांड का उपयोग करें:

php artisan make:model Post -m
यह कमांड Post नाम का एक मॉडल और उसके लिए एक माइग्रेशन फाइल भी बनाएगा। माइग्रेशन फाइल database/migrations डायरेक्टरी में स्थित होगी।

3. मॉडल के साथ फैक्ट्री और सीडर उत्पन्न करना (Generating a Model with Factory and Seeder)

आप एक मॉडल उत्पन्न करते समय उसके लिए एक फैक्ट्री और सीडर फाइल भी बना सकते हैं। इसके लिए निम्नलिखित कमांड का उपयोग करें:

php artisan make:model Post -mfsc
यह कमांड Post नाम का एक मॉडल, एक माइग्रेशन फाइल, एक फैक्ट्री फाइल, और एक सीडर फाइल बनाएगा।

4. मॉडल संरचना (Structure of a Model)

एक साधारण मॉडल का उदाहरण:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use HasFactory;

    // मॉडल के लिए आवश्यक गुण और विधियाँ यहाँ परिभाषित करें
}

ऊपर दिए गए उदाहरण में, Post मॉडल Model क्लास को एक्सटेंड करता है और HasFactory ट्रेट का उपयोग करता है। आप इस मॉडल में अन्य गुण और विधियाँ भी जोड़ सकते हैं, जैसे किfillable, guarded, आदि।

5. माइग्रेशन फाइल संरचना (Structure of a Migration File)

माइग्रेशन फाइल डेटाबेस टेबल्स को परिभाषित करने के लिए उपयोग की जाती है। एक माइग्रेशन फाइल का उदाहरण:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreatePostsTable extends Migration
{
    /**
     * रन करने के लिए माइग्रेशन
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->text('content');
            $table->timestamps();
        });
    }

    /**
     * माइग्रेशन को रिवर्स करने के लिए
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
    }
}

ऊपर दिए गए उदाहरण में, CreatePostsTable माइग्रेशन फाइल posts नाम की टेबल को परिभाषित करती है, जिसमें id, title, content, और timestamps कॉलम होते हैं।

6. माइग्रेशन चलाना (Running the Migration)

माइग्रेशन फाइल बनाने के बाद, आप इसे डेटाबेस में लागू करने के लिए निम्नलिखित कमांड चला सकते हैं:
php artisan migrate
यह कमांड माइग्रेशन फाइल में परिभाषित सभी टेबल्स और कॉलम्स को डेटाबेस में बनाएगा।

Laravel में मॉडल बनाना और प्रबंधित करना Eloquent ORM की सहायता से बहुत सरल और प्रभावी हो जाता है। इन मॉडलों का उपयोग करके आप अपने एप्लिकेशन के डेटा को आसानी से प्रबंधित और मैनिपुलेट कर सकते हैं।

माइग्रेशन और सीडिंग (Migrations and Seeding)

Laravel में माइग्रेशन और सीडिंग डेटाबेस स्कीमा को प्रबंधित और प्रारंभिक डेटा को भरने के लिए महत्वपूर्ण टूल्स हैं। माइग्रेशन डेटाबेस टेबल्स की संरचना को परिभाषित और बदलने के लिए उपयोग किए जाते हैं, जबकि सीडिंग डेटाबेस में प्रारंभिक डेटा डालने के लिए उपयोग किया जाता है। आइए, हम माइग्रेशन और सीडिंग के विभिन्न पहलुओं को विस्तार से समझें।

1. माइग्रेशन उत्पन्न करना (Generating Migrations)

आप Artisan कमांड-लाइन टूल का उपयोग करके एक नया माइग्रेशन उत्पन्न कर सकते हैं। निम्नलिखित कमांड का उपयोग करें:
php artisan make:migration create_posts_table
यह कमांड database/migrations डायरेक्टरी में create_posts_table नाम की माइग्रेशन फाइल बनाएगा।

2. माइग्रेशन फाइल संरचना (Structure of a Migration File)

एक माइग्रेशन फाइल में up और down मेथड्स होते हैं। up मेथड डेटाबेस टेबल्स और कॉलम्स को बनाता है, जबकि down मेथड उन्हें रिवर्स करता है।

उदाहरण: माइग्रेशन फाइल

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreatePostsTable extends Migration
{
    /**
     * रन करने के लिए माइग्रेशन
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->text('content');
            $table->timestamps();
        });
    }

    /**
     * माइग्रेशन को रिवर्स करने के लिए
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
    }
}

ऊपर दिए गए उदाहरण में, CreatePostsTable माइग्रेशन फाइल posts नाम की टेबल को परिभाषित करती है, जिसमें id, title, content, और timestamps कॉलम होते हैं।

3. माइग्रेशन चलाना (Running Migrations)

माइग्रेशन फाइल बनाने के बाद, आप इसे डेटाबेस में लागू करने के लिए निम्नलिखित कमांड चला सकते हैं:

php artisan migrate
यह कमांड माइग्रेशन फाइल में परिभाषित सभी टेबल्स और कॉलम्स को डेटाबेस में बनाएगा।

4. माइग्रेशन रोलबैक करना (Rolling Back Migrations)

यदि आप किसी माइग्रेशन को रिवर्स करना चाहते हैं, तो आप निम्नलिखित कमांड का उपयोग कर सकते हैं:

php artisan migrate:rollback
यह कमांड आखिरी रन की गई माइग्रेशन को रिवर्स कर देगा।

5. सीडिंग उत्पन्न करना (Generating Seeders)

आप Artisan कमांड-लाइन टूल का उपयोग करके एक नया सीडर उत्पन्न कर सकते हैं। निम्नलिखित कमांड का उपयोग करें:

php artisan make:seeder PostsTableSeeder
यह कमांड database/seeders डायरेक्टरी में PostsTableSeeder नाम की सीडर फाइल बनाएगा।

6. सीडर फाइल संरचना (Structure of a Seeder File)

एक सीडर फाइल में run मेथड होता है, जो डेटाबेस में डेटा डालने के लिए उपयोग किया जाता है।

उदाहरण: सीडर फाइल

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class PostsTableSeeder extends Seeder
{
    /**
     * डेटाबेस टेबल को सीड करने के लिए रन करें।
     *
     * @return void
     */
    public function run()
    {
        DB::table('posts')->insert([
            'title' => 'First Post',
            'content' => 'This is the content of the first post.',
        ]);
    }
}

ऊपर दिए गए उदाहरण में, PostsTableSeeder सीडर फाइल posts टेबल में एक नया रिकॉर्ड डालती है।

7. सीडर चलाना (Running Seeders)

आप सभी सीडर्स को चलाने के लिए निम्नलिखित कमांड का उपयोग कर सकते हैं:
php artisan db:seed
यदि आप किसी विशेष सीडर को चलाना चाहते हैं, तो आप निम्नलिखित कमांड का उपयोग कर सकते हैं:

php artisan db:seed --class=PostsTableSeeder

8. फैक्ट्री और सीडर का उपयोग (Using Factories and Seeders)

आप फैक्ट्री का उपयोग करके बड़े पैमाने पर डेटा उत्पन्न कर सकते हैं और इसे सीडर में उपयोग कर सकते हैं।

उदाहरण: फैक्ट्री बनाना
php artisan make:factory PostFactory --model=Post

फैक्ट्री फाइल संरचना

<?php

namespace Database\Factories;

use App\Models\Post;
use Illuminate\Database\Eloquent\Factories\Factory;

class PostFactory extends Factory
{
    protected $model = Post::class;

    public function definition()
    {
        return [
            'title' => $this->faker->sentence,
            'content' => $this->faker->paragraph,
        ];
    }
}

सीडर में फैक्ट्री का उपयोग

public function run()
{
\App\Models\Post::factory(10)->create();
}

माइग्रेशन और सीडिंग Laravel में डेटाबेस स्कीमा और डेटा प्रबंधन के लिए महत्वपूर्ण उपकरण हैं। इनका सही उपयोग करके, आप अपने डेटाबेस को आसानी से प्रबंधित और प्रारंभिक डेटा से भर सकते हैं।

ईलोकोईन्ट ORM (Eloquent ORM)

Laravel का Eloquent ORM (Object-Relational Mapping) एक शक्तिशाली और सहज टूल है जो आपको डेटाबेस के साथ इंटरैक्ट करने की सुविधा प्रदान करता है। Eloquent ORM डेटाबेस टेबल्स को मॉडल्स के माध्यम से प्रस्तुत करता है और आपको एक सुंदर और एक्सप्रेसिव सिंटैक्स के माध्यम से डेटाबेस क्वेरीज लिखने की अनुमति देता है। आइए, हम Eloquent ORM की विभिन्न सुविधाओं और कार्यक्षमताओं को समझें।

1. मॉडल का उपयोग (Using Models)

Eloquent ORM के माध्यम से डेटाबेस टेबल्स को मॉडल्स द्वारा प्रस्तुत किया जाता है। प्रत्येक मॉडल एक डेटाबेस टेबल का प्रतिनिधित्व करता है।

उदाहरण: Post मॉडल का उपयोग

use App\Models\Post;

// सभी पोस्ट प्राप्त करें
$posts = Post::all();

// एक पोस्ट प्राप्त करें
$post = Post::find(1);

// पोस्ट बनाएं
$post = new Post;
$post->title = 'New Post';
$post->content = 'This is the content of the new post.';
$post->save();

2. बेसिक क्वेरीज (Basic Queries)

Eloquent आपको सरल और स्पष्ट क्वेरी बिल्डर प्रदान करता है।

उदाहरण: क्वेरीज

// सभी पोस्ट प्राप्त करें
$posts = Post::all();

// एक विशिष्ट पोस्ट प्राप्त करें
$post = Post::find(1);

// पोस्ट को फिल्टर करें
$posts = Post::where('status', 'published')->get();

3. कस्टम क्वेरीज (Custom Queries)

Eloquent आपको कस्टम क्वेरीज लिखने की सुविधा भी प्रदान करता है।

उदाहरण: कस्टम क्वेरीज

// शीर्षक के आधार पर पोस्ट प्राप्त करें
$posts = Post::where('title', 'like', '%Laravel%')->get();

// लेटेस्ट पोस्ट प्राप्त करें
$posts = Post::orderBy('created_at', 'desc')->take(10)->get();

4. संबंध (Relationships)

Eloquent आपको डेटाबेस टेबल्स के बीच संबंध स्थापित करने की सुविधा भी प्रदान करता है। Laravel में विभिन्न प्रकार के संबंध होते हैं, जैसे कि एक-से-एक, एक-से-कई, और कई-से-कई।

उदाहरण: एक-से-कई संबंध

// User मॉडल में संबंध परिभाषित करना
public function posts()
{
    return $this->hasMany(Post::class);
}

// Post मॉडल में संबंध परिभाषित करना
public function user()
{
    return $this->belongsTo(User::class);
}

// संबंध का उपयोग करना
$user = User::find(1);
$posts = $user->posts;

उदाहरण: कई-से-कई संबंध

// Post मॉडल में संबंध परिभाषित करना
public function tags()
{
    return $this->belongsToMany(Tag::class);
}

// Tag मॉडल में संबंध परिभाषित करना
public function posts()
{
    return $this->belongsToMany(Post::class);
}

// संबंध का उपयोग करना
$post = Post::find(1);
$tags = $post->tags;

5. ईगर लोडिंग (Eager Loading)

Eloquent में ईगर लोडिंग का उपयोग करके आप संबंधों को प्रीलोड कर सकते हैं, जिससे क्वेरी की संख्या कम हो जाती है और प्रदर्शन में सुधार होता है।

उदाहरण: ईगर लोडिंग

// ईगर लोडिंग के साथ पोस्ट प्राप्त करें
$posts = Post::with('user')->get();

6. म्यूटेटर्स और एक्सेसर्स (Mutators and Accessors)

Eloquent में म्यूटेटर्स और एक्सेसर्स का उपयोग करके आप मॉडल के एट्रिब्यूट्स को संशोधित और एक्सेस कर सकते हैं।

उदाहरण: एक्सेसर

public function getTitleAttribute($value)
{
return ucfirst($value);
}

उदाहरण: म्यूटेटर

public function setTitleAttribute($value)
{
$this->attributes['title'] = strtolower($value);
}

7. स्कोप्स (Scopes)

Eloquent में स्कोप्स का उपयोग करके आप क्वेरी लॉजिक को पुन: उपयोग कर सकते हैं।

उदाहरण: लोकल स्कोप

// मॉडल में स्कोप परिभाषित करना
public function scopePublished($query)
{
    return $query->where('status', 'published');
}

// स्कोप का उपयोग करना
$posts = Post::published()->get();

Laravel का Eloquent ORM आपको डेटाबेस के साथ इंटरैक्ट करने का एक आसान और शक्तिशाली तरीका प्रदान करता है। इसके उपयोग से आप जटिल डेटाबेस ऑपरेशन्स को सरल और स्पष्ट तरीके से निष्पादित कर सकते हैं। Eloquent ORM की यह कार्यक्षमता आपके एप्लिकेशन को अधिक प्रभावी और प्रबंधनीय बनाती है।



Table of Contents

Index