DEV Community

Cover image for Laravel Eloquent ORM in Bangla Part-10 (Comparing Models)
Sontus Chandra Anik
Sontus Chandra Anik

Posted on

Laravel Eloquent ORM in Bangla Part-10 (Comparing Models)

Laravel Eloquent-এ Comparing Models বা মডেলগুলি তুলনা করা একটি গুরুত্বপূর্ণ কাজ, যা বিভিন্ন পরিস্থিতিতে প্রয়োজন হতে পারে, যেমন একই মডেলের দুটি ইন্সট্যান্সের মধ্যে পার্থক্য খোঁজা বা চেক করা, অথবা কোন মডেল পরিবর্তিত হয়েছে কিনা তা চেক করা।

Laravel বিভিন্ন পদ্ধতির মাধ্যমে মডেলগুলির তুলনা করার সুবিধা দেয়, যাতে আপনি সহজেই ডেটা চেক করতে পারেন। নিচে এর বিভিন্ন পদ্ধতি এবং উদাহরণ দেওয়া হলো:

১. is() মেথড দিয়ে মডেল তুলনা করা

Laravel-এ is() মেথড ব্যবহার করে আপনি দুটি মডেল ইন্সট্যান্সের মধ্যে তুলনা করতে পারেন। এটি দেখবে যে, দুটি মডেল একই মডেল বা একই রেকর্ড কিনা।

ব্যবহার:

use App\Models\Post;

$post1 = Post::find(1);
$post2 = Post::find(1);
$post3 = Post::find(2);

// মডেল তুলনা করা
if ($post1->is($post2)) {
    echo "পোস্ট ১ এবং পোস্ট ২ একে অপরের সাথে একটিই।";
} else {
    echo "পোস্ট ১ এবং পোস্ট ২ আলাদা।";
}

// পোস্ট ১ এবং পোস্ট ৩ তুলনা করা
if ($post1->is($post3)) {
    echo "পোস্ট ১ এবং পোস্ট ৩ একটিই।";
} else {
    echo "পোস্ট ১ এবং পোস্ট ৩ আলাদা।";
}

Enter fullscreen mode Exit fullscreen mode

এখানে is() মেথডটি দুটি মডেলের আইডি এবং রেফারেন্স তুলনা করে। যদি দুটি মডেল একই রেকর্ডের ইন্সট্যান্স হয় তবে এটি true ফেরত দেবে, না হলে false

২. isNot() মেথড দিয়ে মডেল তুলনা করা

isNot() মেথডটি is() এর বিপরীত। এটি মডেলগুলির মধ্যে তুলনা করে এবং যদি মডেল দুটি আলাদা হয়, তবে true ফেরত দেয়।

ব্যবহার:

use App\Models\Post;

$post1 = Post::find(1);
$post2 = Post::find(2);

if ($post1->isNot($post2)) {
    echo "পোস্ট ১ এবং পোস্ট ২ আলাদা।";
} else {
    echo "পোস্ট ১ এবং পোস্ট ২ একটিই।";
}

Enter fullscreen mode Exit fullscreen mode

এটি is() মেথডের বিপরীত, যেখানে আপনি চেক করতে পারেন যে মডেল দুটি আলাদা কিনা।

৩. isDirty() এবং isClean() মেথড দিয়ে মডেল তুলনা করা

Laravel Eloquent আপনাকে isDirty() এবং isClean() মেথড প্রদান করে, যা আপনাকে সাহায্য করে বুঝতে যে মডেলের ডেটা পরিবর্তিত হয়েছে কিনা।

  • isDirty(): মডেলের কোনো ফিল্ড পরিবর্তিত হলে এটি true ফেরত দেয়।
  • isClean(): যদি মডেলটি পরিবর্তিত না হয়, তবে এটি true ফেরত দেয়।

ব্যবহার:

use App\Models\Post;

$post = Post::find(1);

// কোনো ফিল্ড পরিবর্তন করার আগে
if ($post->isDirty()) {
    echo "পোস্টটি পরিবর্তিত হয়েছে।";
} else {
    echo "পোস্টটি পরিবর্তিত হয়নি।";
}

// কোনো ফিল্ড পরিবর্তন করার পরে
$post->title = "নতুন শিরোনাম";

if ($post->isDirty()) {
    echo "পোস্টটি পরিবর্তিত হয়েছে।";
} else {
    echo "পোস্টটি পরিবর্তিত হয়নি।";
}

// মডেলটি সেভ করার পরে
$post->save();

if ($post->isClean()) {
    echo "পোস্টটি আর কোনো পরিবর্তন হয়নি।";
}

Enter fullscreen mode Exit fullscreen mode

এখানে, isDirty() মেথডটি দেখাবে যে কোনো ফিল্ড পরিবর্তিত হয়েছে কিনা, এবং isClean() দেখাবে যে মডেলটি সেভ হওয়ার পরে কোনো পরিবর্তন হয়নি।

৪. isEqual() মেথড (Custom) দিয়ে মডেল তুলনা করা

Laravel স্বাভাবিকভাবে isEqual() মেথড সরবরাহ করে না, তবে আপনি যদি নিজস্ব মেথড তৈরি করতে চান যা দুটি মডেলের মধ্যে তুলনা করবে, তখন আপনি isEqual() মেথড তৈরি করতে পারেন। এই মেথডটি মডেলগুলির ডেটার মধ্যে পার্থক্য চেক করবে।

ব্যবহার:

use App\Models\Post;

class Post extends Model
{
    // Custom isEqual() method তৈরি
    public function isEqual($otherPost)
    {
        return $this->title === $otherPost->title && $this->content === $otherPost->content;
    }
}

$post1 = Post::find(1);
$post2 = Post::find(2);

if ($post1->isEqual($post2)) {
    echo "পোস্ট ১ এবং পোস্ট ২ সমান।";
} else {
    echo "পোস্ট ১ এবং পোস্ট ২ আলাদা।";
}

Enter fullscreen mode Exit fullscreen mode

এখানে আপনি isEqual() মেথডটি নিজে কাস্টমাইজ করেছেন যাতে আপনি মডেলগুলির নির্দিষ্ট ক্ষেত্রগুলির মধ্যে তুলনা করতে পারেন।

৫. diff() মেথড (Array Diff) ব্যবহার করে মডেল তুলনা করা

যখন আপনি মডেলগুলির মধ্যে ডেটার পার্থক্য বের করতে চান, তখন আপনি diff() মেথড ব্যবহার করতে পারেন, যা একে অপরের মধ্যে পার্থক্য দেখাবে।

ব্যবহার:

use App\Models\Post;

$post1 = Post::find(1);
$post2 = Post::find(2);

// ডেটার পার্থক্য চেক করা
$diff = $post1->getAttributes() != $post2->getAttributes();

if ($diff) {
    echo "পোস্ট ১ এবং পোস্ট ২-এর মধ্যে পার্থক্য রয়েছে।";
} else {
    echo "পোস্ট ১ এবং পোস্ট ২ সমান।";
}

Enter fullscreen mode Exit fullscreen mode

এখানে, getAttributes() মেথডটি মডেলের সব অ্যাট্রিবিউট (ফিল্ড) ফেরত দেয়, এবং আমরা তার মধ্যে পার্থক্য বের করতে != অপারেটর ব্যবহার করেছি।

৬. compare() (Custom) মেথড দিয়ে মডেল তুলনা করা

আপনি চাইলে নিজস্ব compare() মেথড তৈরি করতে পারেন, যা দুটি মডেলের পার্থক্য বের করবে।

class Post extends Model
{
    // Custom compare() method
    public function compare(Post $otherPost)
    {
        $changes = [];
        if ($this->title !== $otherPost->title) {
            $changes['title'] = [$this->title, $otherPost->title];
        }
        if ($this->content !== $otherPost->content) {
            $changes['content'] = [$this->content, $otherPost->content];
        }

        return $changes;
    }
}

$post1 = Post::find(1);
$post2 = Post::find(2);

// মডেল তুলনা করা
$changes = $post1->compare($post2);
if (!empty($changes)) {
    print_r($changes); // পরিবর্তনগুলো দেখাবে
} else {
    echo "পোস্ট ১ এবং পোস্ট ২ সমান।";
}

Enter fullscreen mode Exit fullscreen mode

এখানে, compare() মেথডটি দুটি মডেলের মধ্যে সুনির্দিষ্ট পার্থক্য বের করবে এবং তার পরিসংখ্যান ফেরত দেবে।

Top comments (0)