ডেটাবেস মডেল Model ব্যবহার (Laravel স্টাইল)

webman মডেল Eloquent ORM এর ওপর ভিত্তি করে। প্রতিটি ডেটাবেস টেবিলের একটি সম্পর্কিত "মডেল" থাকে যা সেই টেবিলের সাথে যোগাযোগ করতে ব্যবহৃত হয়। আপনি মডেল দ্বারা ডেটাবেসের তথ্য অনুসন্ধান করতে এবং নতুন রেকর্ড যুক্ত করতে পারেন।

শুরুর আগে, দয়া করে নিশ্চিত করুন যে আপনি config/database.php এ ডেটাবেস সংযোগ কনফিগার করেছেন।

সতর্কতা: Eloquent ORM-এ মডেল পর্যবেক্ষক সমর্থন করতে অতিরিক্ত ইনস্টল করতে হবে composer require "illuminate/events" উদাহরণ

ডেটাবেস মডেল উদাহরণ

<?php
namespace app\model;

use support\Model;

class User extends Model
{
    /**
     * মডেলের সাথে সম্পর্কিত টেবিলের নাম
     *
     * @var string
     */
    protected $table = 'user';

    /**
     * প্রধান কী পুনঃসংজ্ঞায়িত করা, ডিফল্ট হল id
     *
     * @var string
     */
    protected $primaryKey = 'uid';

    /**
     * সময়ছক স্বয়ংক্রিয়ভাবে রক্ষা করা হচ্ছে কিনা তা নির্দেশ করে
     *
     * @var bool
     */
    public $timestamps = false;
}

টেবিল নাম

আপনি মডেলে table প্রপার্টি সংজ্ঞায়িত করে কাস্টম ডেটাবেস টেবিল নির্ধারণ করতে পারেন:

class User extends Model
{
    /**
     * মডেলের সাথে সম্পর্কিত টেবিলের নাম
     *
     * @var string
     */
    protected $table = 'user';
}

প্রধান কী

Eloquent এটি অনুমান করবে যে প্রতিটি ডেটাবেস টেবিলের একটি id নামক প্রধান কী কলাম রয়েছে। আপনি একটি সুরক্ষিত $primaryKey প্রপার্টি নির্ধারণ করে কনভেনশন ওভাররাইড করতে পারেন।

class User extends Model
{
    /**
     * প্রধান কী পুনঃসংজ্ঞায়িত করা, ডিফল্ট হল id
     *
     * @var string
     */
    protected $primaryKey = 'uid';
}

Eloquent অনুমান করে যে প্রধান কী একটি স্বয়ংক্রিয় সংখ্যা, যার অর্থ হল ডিফল্টরূপে প্রধান কী স্বয়ংক্রিয়ভাবে int প্রকারে রূপান্তরিত হয়। যদি আপনি অ-স্বয়ংক্রিয় বা অ-সংখ্যা প্রধান কী ব্যবহার করতে চান তবে আপনাকে জনসাধারণের $incrementing প্রপার্টি false এ সেট করতে হবে।

class User extends Model
{
    /**
     * মডেলের প্রধান কী স্বয়ংক্রিয় কিনা তা নির্দেশ করে
     *
     * @var bool
     */
    public $incrementing = false;
}

যদি আপনার প্রধান কী একটি পূর্ণসংখ্যা না হয় তবে আপনাকে মডেলে সুরক্ষিত $keyType প্রপার্টি string এ সেট করতে হবে:

class User extends Model
{
    /**
     * স্বয়ংক্রিয় সম্পত্তির "প্রকার"।
     *
     * @var string
     */
    protected $keyType = 'string';
}

সময়ছক

ডিফল্টরূপে, Eloquent আশা করে যে আপনার ডেটাবেস টেবিলে created_at এবং updated_at থাকবে। যদি আপনি না চান Eloquent অটোমেটিকভাবে এই দুটি কলাম পরিচালনা করুক তবে আপনাকে মডেলের $timestamps প্রপার্টি false এ সেট করতে হবে:

class User extends Model
{
    /**
     * সময়ছক স্বয়ংক্রিয়ভাবে রক্ষা করা হচ্ছে কিনা তা নির্দেশ করে
     *
     * @var bool
     */
    public $timestamps = false;
}

যদি আপনি সময়ছক এর ফরম্যাট কাস্টমাইজ করতে চান, তাহলে আপনার মডেলে $dateFormat প্রপার্টি সেট করুন। এই প্রপার্টিটি ডেটার দৃশ্যমানতার উৎপন্ন রূপ এবং ডেটাবেসে সংরক্ষণের পদ্ধতি নির্ধারণ করে:

class User extends Model
{
    /**
     * সময়ছক সংরক্ষণের ফরম্যাট
     *
     * @var string
     */
    protected $dateFormat = 'U';
}

যদি আপনি সময়ছক সংরক্ষণের ক্ষেত্রের নাম কাস্টমাইজ করতে চান তবে আপনি মডেলে CREATED_AT এবং UPDATED_AT কনস্ট্যান্টের মান নির্ধারণ করতে পারেন:

class User extends Model
{
    const CREATED_AT = 'creation_date';
    const UPDATED_AT = 'last_update';
}

ডেটাবেস সংযোগ

সাধারণভাবে, Eloquent মডেল আপনার অ্যাপের কনফিগার করা ডিফল্ট ডেটাবেস সংযোগ ব্যবহার করবে। যদি আপনি মডেলের জন্য একটি আলাদা সংযোগ উল্লেখ করতে চান তবে $connection প্রপার্টি সেট করুন:

class User extends Model
{
    /**
     * মডেলের সংযোগের নাম
     *
     * @var string
     */
    protected $connection = 'connection-name';
}

ডিফল্ট প্রপার্টি মান

যদি আপনি মডেলের কিছু প্রপার্টির জন্য ডিফল্ট মান সংজ্ঞায়িত করতে চান তবে আপনি মডেলে $attributes প্রপার্টি নির্ধারণ করতে পারেন:

class User extends Model
{
    /**
     * মডেলের ডিফল্ট প্রপার্টি মান।
     *
     * @var array
     */
    protected $attributes = [
        'delayed' => false,
    ];
}

মডেল অনুসন্ধান

মডেল তৈরি করার এবং এটি সম্পর্কিত ডেটাবেস টেবিল করার পরে, আপনি ডেটাবেস থেকে তথ্য অনুসন্ধান করতে পারবেন। প্রতিটি Eloquent মডেলকে একটি শক্তিশালী অনুসন্ধান নির্মাতা হিসেবে মনে করুন, এটি আপনাকে সম্পর্কে সম্পৃক্ত টেবিলের তথ্য দ্রুত অনুসন্ধানের সুযোগ দেয়। উদাহরণস্বরূপ:

$users = app\model\User::all();

foreach ($users as $user) {
    echo $user->name;
}

পরামর্শ: যেহেতু Eloquent মডেলগুলি অনুসন্ধান নির্মাতা, তাই আপনাকেও অনুসন্ধান নির্মাতা উপলব্ধ সব পদ্ধতি পড়া উচিত। আপনি Eloquent অনুসন্ধানে এই পদ্ধতিগুলি ব্যবহার করতে পারেন।

অতিরিক্ত শর্ত

Eloquent এর all পদ্ধতি মডেলের সব ফলাফল ফেরত দিবে। যেহেতু প্রতিটি Eloquent মডেল একটি অনুসন্ধান নির্মাতা হিসেবে কাজ করে, তাই আপনি অনুসন্ধান সামগ্রী যোগ করতে পারেন এবং তারপর get পদ্ধতি ব্যবহার করে অনুসন্ধান ফলাফল পান:

$users = app\model\User::where('name', 'like', '%tom')
               ->orderBy('uid', 'desc')
               ->limit(10)
               ->get();

মডেল পুনঃলোড

আপনি fresh এবং refresh পদ্ধতি ব্যবহার করে মডেল পুনঃলোড করতে পারেন। fresh পদ্ধতি ডেটাবেস থেকে মডেল আবার পুনরুদ্ধার করে। বিদ্যমান মডেল ইনস্ট্যান্স প্রভাবিত হবে না:

$user = app\model\User::where('name', 'tom')->first();

$fresh_user = $user->fresh();

refresh পদ্ধতি ডেটাবেসের নতুন তথ্য ব্যবহার করে বিদ্যমান মডেলে পুনরায় মান সেট করে। সুতরাং, পূর্বে লোড করা সম্পর্কগুলি আবার লোড হবে:

$user = app\model\User::where('name', 'tom')->first();

$user->name = 'jerry';

$user = $user->fresh();

$user->name; // "tom"

সংগ্রহ

Eloquent এর all এবং get পদ্ধতি একাধিক ফলাফল অনুসন্ধান করতে পারে, যা একটি Illuminate\Database\Eloquent\Collection ইনস্ট্যান্স ফেরত দেয়। Collection ক্লাস Eloquent ফলাফল পরিচালনা করার জন্য অনেক ধরনের সহায়ক ফাংশন প্রদান করে:

$users = $users->reject(function ($user) {
    return $user->disabled;
});

কার্সর ব্যবহার

cursor পদ্ধতি আপনাকে কার্সর ব্যবহার করে ডেটাবেস টেবিল মধ্যে ভ্রমণ করতে দেয়, এটি একটি বার অপারেশনে শুধুমাত্র একবার অনুসন্ধান কার্যকরী করে। বিশাল পরিমাণ তথ্য পরিচালনার সময়, cursor পদ্ধতি স্মৃতির ব্যবহার অনেক কমিয়ে দিতে পারে:

foreach (app\model\User::where('sex', 1)->cursor() as $user) {
    //
}

cursor একটি Illuminate\Support\LazyCollection ইনস্ট্যান্স ফেরত দেয়। Lazy collections আপনাকে Laravel সংগ্রহের অধিকাংশ সংগ্রহ পদ্ধতি ব্যবহার করতে দেয় এবং প্রতিবার মাত্র একটি মডেলকে স্মৃতিতে লোড করে:

$users = app\model\User::cursor()->filter(function ($user) {
    return $user->id > 500;
});

foreach ($users as $user) {
    echo $user->id;
}

Selects সাবকোয়েরি

Eloquent উন্নত সাবকোয়েরি সমর্থন করে, আপনি একক কোয়েরি বিবৃতি দ্বারা সম্পর্কিত টেবিল থেকে তথ্য সংশোধন করতে পারেন। যেমন, ধরুন আমাদের উদ্দেশ্য টেবিল destinations এবং একটি উদ্দেশ্যের জন্য ফ্লাইট টেবিল flights আছে। flights টেবিলে arrival_at একটি ক্ষেত্র রয়েছে, যা ফ্লাইটের গন্তব্যে পৌঁছানোর সময় নির্দেশ করে।

সাবকোয়েরি বৈশিষ্ট্য দ্বারা প্রদত্ত select এবং addSelect পদ্ধতিগুলি ব্যবহার করে, আমরা একটি একক বিবৃতির সাথে সমস্ত উদ্দেশ্য (destinations) অনুসন্ধান করতে পারি এবং প্রতিটি গন্তব্যের জন্য শেষ ফ্লাইটের নাম পেতে পারিঃ

use app\model\Destination;
use app\model\Flight;

return Destination::addSelect(['last_flight' => Flight::select('name')
    ->whereColumn('destination_id', 'destinations.id')
    ->orderBy('arrived_at', 'desc')
    ->limit(1)
])->get();

সাবকোয়েরি দ্বারা সাজানো

তদুপরি, অনুসন্ধান নির্মাতার orderBy ফাংশনও সাবকোয়েরি সমর্থন করে। আমরা এই বৈশিষ্ট্যটি ব্যবহার করে সমস্ত গন্তব্যগুলি শেষ ফ্লাইটের সময় অনুসারে সাজাতে পারি। তদুপরি, এটি শুধুমাত্র একক অনুসন্ধান কার্যকর করে:

return Destination::orderByDesc(
    Flight::select('arrived_at')
        ->whereColumn('destination_id', 'destinations.id')
        ->orderBy('arrived_at', 'desc')
        ->limit(1)
)->get();

একক মডেল / সংগ্রহ অনুসন্ধান

নির্দিষ্ট ডেটাবেস টেবিল থেকে সমস্ত রেকর্ড পুনরুদ্ধার করার পাশাপাশি, আপনি find, first বা firstWhere পদ্ধতি ব্যবহার করে একটি একক রেকর্ড পুনরুদ্ধার করতে পারেন। এই পদ্ধতিগুলি একটি সিঙ্গেল মডেল ইনস্ট্যান্স ফেরত দেয়, মডেল সংগ্রহের পরিবর্তে:

// প্রধান কী দ্বারা একটি মডেল সন্ধান...
$flight = app\model\Flight::find(1);

// অনুসন্ধান শর্ত পূরণকারী প্রথম মডেল সন্ধান...
$flight = app\model\Flight::where('active', 1)->first();

// অনুসন্ধান শর্ত পূরণকারী প্রথম মডেল দ্রুত অনুসন্ধান...
$flight = app\model\Flight::firstWhere('active', 1);

আপনি find পদ্ধতিতে বার্ষিক কী অ্যারেকে একটি প্যারামিটার হিসাবে ব্যবহার করে কল করতে পারেন, এটি পাওয়া রেকর্ডের সংগ্রহ ফেরত দেবে:

$flights = app\model\Flight::find([1, 2, 3]);

কখনও কখনও আপনি প্রথম ফলাফল অনুসন্ধান করতে চান কিন্তু যদি কোন মান না পাওয়া যায় তাহলে অন্য কিছু করার ইচ্ছা হতে পারে। firstOr পদ্ধতি যদি কোন ফলাফল পাওয়া যায় তবে প্রথম ফলাফল ফেরত দেবে এবং ফলস্বরূপ, যদি ফলাফল না পাওয়া যায় তবে একটি নির্দিষ্ট কলব্যাক কার্যকর হবে। কলব্যাকের ফেরত দেওয়া মান firstOr পদ্ধতির ফেরত মান হিসাবে প্রয়োগ হবে:

$model = app\model\Flight::where('legs', '>', 100)->firstOr(function () {
        // ...
});

firstOr পদ্ধতি একইভাবে ক্ষেত্রের অ্যারে ব্যবহার করে অনুসন্ধান করতে পারে:

$model = app\model\Flight::where('legs', '>', 100)
            ->firstOr(['id', 'legs'], function () {
                // ...
            });

"না পাওয়া" ব্যতিক্রম

কখনও কখনও আপনি চান যে মডেল না পাওয়া গেলে একটি ব্যতিক্রম তৈরি হোক। এটি কন্ট্রোলার এবং রুটগুলির মধ্যে খুবই উপকারী। findOrFail এবং firstOrFail পদ্ধতি অনুসন্ধানের প্রথম ফলাফল পুনরুদ্ধার করবে এবং যদি না পাওয়া যায় তাহলে Illuminate\Database\Eloquent\ModelNotFoundException ব্যতিক্রম ছুড়ে দেবে:

$model = app\model\Flight::findOrFail(1);
$model = app\model\Flight::where('legs', '>', 100)->firstOrFail();

সংগ্রহ অনুসন্ধান

আপনি তাছাড়া অনুসন্ধান নির্মাতা দ্বারা প্রদত্ত count, sum এবং max পদ্ধতি এবং অন্যান্য সংগ্রহ ফাংশনগুলি ব্যবহার করে সংগ্রহগুলি পরিচালনা করতে পারেন। এই পদ্ধতিগুলি শুধুমাত্র উপযুক্ত স্কেলার মান ফেরত দিবে, মডেল ইনস্ট্যান্স নয়:

$count = app\model\Flight::where('active', 1)->count();

$max = app\model\Flight::where('active', 1)->max('price');

вставить

ডেটাবেসে একটি নতুন রেকর্ড যুক্ত করতে, প্রথমে একটি নতুন মডেল ইনস্ট্যান্স তৈরি করুন, ইনস্ট্যান্সটিকে প্রপার্টি সেট করুন এবং পরে save পদ্ধতি কল করুন:

<?php

namespace app\controller;

use app\model\User;
use support\Request;
use support\Response;

class FooController
{
    /**
     * ইউজার টেবিলে নতুন একটি রেকর্ড যুক্ত করুন
     *
     * @param  Request  $request
     * @return Response
     */
    public function store(Request $request)
    {
        // অনুরোধ যাচাই করা

        $user = new User;

        $user->name = $request->get('name');

        $user->save();
    }
}

created_at এবং updated_at সময়ছকগুলি স্বয়ংক্রিয়ভাবে সেট করা হবে (যখন মডেলের $timestamps প্রপার্টি true থাকে), আপনাকে ম্যানুয়ালি মান সেট করতে হবে না।

আপডেট

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

$user = app\model\User::find(1);
$user->name = 'jerry';
$user->save();

ব্যাচ আপডেট

app\model\User::where('uid', '>', 10)
          ->update(['name' => 'tom']);

প্রপার্টির পরিবর্তন চেক করা

Eloquent isDirty, isClean এবং wasChanged পদ্ধতিগুলি প্রদান করে, যা মডেলের অভ্যন্তরীণ অবস্থা পরীক্ষা করতে এবং নির্ধারণ করতে সাহায্য করে কিভাবে এটি পঠনের সময় থেকে বিশেষভাবে পরিবর্তিত হয়েছে। isDirty পদ্ধতি নির্দেশ করে যে মডেলটি লোড হওয়ার পর থেকে কোন প্রপার্টির উপাদান পরিবর্তিত হয়েছে কিনা। আপনি নির্দিষ্ট প্রপার্টির নাম পাঠাতে পারেন যাতে নির্দিষ্ট প্রপার্টির পরিবর্তন ঘটেছে কিনা তা নির্ধারণ করতে: isClean পদ্ধতি isDirty এর বিপরীত, এটি বিকল্প প্রপার্টি প্যারামিটারও গ্রহণ করে:

$user = User::create([
    'first_name' => 'Taylor',
    'last_name' => 'Otwell',
    'title' => 'Developer',
]);

$user->title = 'Painter';

$user->isDirty(); // true
$user->isDirty('title'); // true
$user->isDirty('first_name'); // false

$user->isClean(); // false
$user->isClean('title'); // false
$user->isClean('first_name'); // true

$user->save();

$user->isDirty(); // false
$user->isClean(); // true

wasChanged পদ্ধতি এটি নির্ধারণ করে যে বর্তমান অনুরোধ চক্রের সময়ে মডেল সংরক্ষণের সর্বশেষ সময়টি কি কোন প্রপার্টি পরিবর্তিত হয়েছে কিনা। আপনি নির্দিষ্ট প্রপার্টির নামও পাঠাতে পারেন, যাতে দেখতে পারেন যে বিশেষ প্রপার্টি পরিবর্তিত হয়েছে কিনা:

$user = User::create([
    'first_name' => 'Taylor',
    'last_name' => 'Otwell',
    'title' => 'Developer',
]);

$user->title = 'Painter';
$user->save();

$user->wasChanged(); // true
$user->wasChanged('title'); // true
$user->wasChanged('first_name'); // false

ব্যাচ প্রপার্টি সেট করা

আপনি নতুন মডেল সংরক্ষণের জন্য create পদ্ধতি ব্যবহার করতে পারেন। এই পদ্ধতি একটি মডেল ইনস্ট্যান্স ফেরত দেয়। তবে, আগে আপনাকে মডেলে fillable বা guarded প্রপার্টি নির্দেশ করতে হবে, কারণ সব Eloquent মডেল ডিফল্টভাবে ব্যাচ প্রপার্টি সেট করতে অক্ষম।

যখন ব্যবহারকারীরা অনুরোধ মারফত অপ্রত্যাশিত HTTP প্যারামিটার পাঠান এবং সেই প্যারামিটারটি ডেটাবেসের মধ্যে তথ্য পরিবর্তিত করে, তখন এটি ব্যাচ প্রপার্টি সেটিংয়ের দুর্বলতা তৈরি করতে পারে। যেমন: একজন অপরাধী ব্যবহারকারী হয়তো HTTP অনুরোধ মারফত is_admin প্যারামিটার পাঠিয়ে সেটিকে create পদ্ধতির জন্য প্রয়োগ করতে পারে, এটি ব্যবহারকারীদের নিজেকে অ্যাডমিন হিসাবে আপগ্রেড করার সুযোগ দেবে।

অতএব, শুরু করার আগে আপনাকে মডেলে নির্ধারণ করতে হবে কোন কোন প্রপার্টি ব্যাচ প্রপার্টি সেট করা হবে। আপনি মডেলের $fillable প্রপার্টি দ্বারা এটি করতে পারেন। উদাহরণস্বরূপ: Flight মডেলের name প্রপার্টি ব্যাচ প্রপার্টি সেট করা যাবে:

<?php

namespace app\model;

use support\Model;

class Flight extends Model
{
    /**
     * ব্যাচ প্রপার্টি সেট করার জন্য উপযুক্ত প্রপার্টি।
     *
     * @var array
     */
    protected $fillable = ['name'];
}

যখন আমরা ব্যাচ প্রপার্টি সেট করার জন্য প্রপার্টিগুলি নির্ধারণ করে নেই, তখন আমরা create পদ্ধতি দ্বারা নতুন তথ্য ডেটাবেসে ঢুকাতে পারিঃ create পদ্ধতি সংরক্ষিত মডেল ইনস্ট্যান্স ফিরিয়ে দেবেঃ

$flight = app\model\Flight::create(['name' => 'Flight 10']);

যদি আপনার কাছে ইতিমধ্যেই একটি মডেল ইনস্ট্যান্স থাকে, তবে আপনি fill পদ্ধতিতে একটি অ্যারে পাস করে মান সেট করতে পারেন:

$flight->fill(['name' => 'Flight 22']);

$fillable কে ব্যাচ প্রপার্টির "সাদা তালিকা" হিসেবে গণনা করা যায়, আপনি $guarded প্রপার্টিও ব্যবহার করতে পারেন। $guarded প্রপার্টিটি হচ্ছে এই তালিকার মধ্যে যা ব্যাচ প্রপার্টি সেটিংয়ের জন্য অগ্রহণযোগ্য। অন্য কথায়, $guarded কার্যকরভাবে "কালো তালিকা" এর মতো। লক্ষ্য করুন: আপনি শুধুমাত্র $fillable অথবা $guarded দুটি মধ্যে একটি ব্যবহার করতে পারবেন, একসাথে ব্যবহার করতে পারবেন না। নিচের উদাহরণের ক্ষেত্রে, price প্রপারের বাইরে সমস্ত প্রপার্টি ব্যাচ প্রপার্টি হিসেবে সেট করা যাবে:

<?php

namespace app\model;

use support\Model;

class Flight extends Model
{
    /**
     * ব্যাচ প্রপার্টি সেট করার জন্য অগ্রহণযোগ্য প্রপার্টি।
     *
     * @var array
     */
    protected $guarded = ['price'];
}

যদি আপনি চান যে সমস্ত প্রপার্টি ব্যাচ প্রপার্টি হিসেবে সেট করা যায়, তবে আপনি $guarded কে একটি খালি অ্যারেতে সেট করতে পারেন:

/**
 * ব্যাচ প্রপার্টি সেট করার জন্য অগ্রহণযোগ্য প্রপার্টি।
 *
 * @var array
 */
protected $guarded = [];

অন্যান্য তৈরি পদ্ধতি

firstOrCreate/ firstOrNew
এখানে দুটি পদ্ধতি রয়েছে যা আপনি ব্যাচ প্রপার্টি সেট করার জন্য ব্যবহার করতে পারেন: firstOrCreate এবং firstOrNew। firstOrCreate পদ্ধতি দেওয়া প্রপার্টি/মান সাগ্রহে ডেটাবেসে তথ্যের সাথে মিলের জন্য প্রয়োগ করা হয়। যদি ডেটাবেসে মডেলটি না পাওয়া যায়, তাহলে এটি একটি রেকর্ড যুক্ত করে, প্রথম প্যারামিটারটির প্রপার্টি সহ, এবং দ্বিতীয় প্যারামিটারের জন্য ঐচ্ছিকভাবে প্রপার্টি থাকতে পারে।

firstOrNew পদ্ধতি firstOrCreate পদ্ধতির মতো ব্যবহারকৃত তথ্যের উপর ভিত্তি করে ডেটাবেসের রেকর্ডটি সন্ধান করার চেষ্টা করে। তবে, যদি firstOrNew পদ্ধতি সংশ্লিষ্ট মডেলটি না পায়, এটি একটি নতুন মডেল ইনস্ট্যান্স ফেরত দেবে। লক্ষ্য করুন firstOrNew থেকে ফিরে আসা মডেল ইনস্ট্যান্স ডেটাবেসে এখনও সংরক্ষিত হয়নি, তাই আপনাকে ম্যানুয়ালি save পদ্ধতিটি কল করতে হবে:

// নাম মারফত ফ্লাইট খোঁজার চেষ্টা করুন, যদি না থাকে তবে তৈরি করুন...
$flight = app\model\Flight::firstOrCreate(['name' => 'Flight 10']);

// নামের ভিত্তিতে ফ্লাইটটি খুঁজুন, অথবা নাম, বিলম্বিত বৈশিষ্ট্য ও প্রবেশের সময় বৈশিষ্ট্যের সাহায্য সহ তৈরি করুন...
$flight = app\model\Flight::firstOrCreate(
    ['name' => 'Flight 10'],
    ['delayed' => 1, 'arrival_time' => '11:30']
);

// নাম মারফত ফ্লাইটটি খুঁজুন, যদি না থাকে তবে একটি ইনস্ট্যান্স তৈরি করুন...
$flight = app\model\Flight::firstOrNew(['name' => 'Flight 10']);

// নামের ভিত্তিতে ফ্লাইটটি খুঁজুন, অথবা নাম, বিলম্বিত বৈশিষ্ট্য ও প্রবেশের সময় বৈশিষ্ট্যে একটি মডেল ইনস্ট্যান্স তৈরি করুন...
$flight = app\model\Flight::firstOrNew(
    ['name' => 'Flight 10'],
    ['delayed' => 1, 'arrival_time' => '11:30']
);

আপনি হয়তো এমন পরিস্থিতির সম্মুখীন হবেন যেখানে বিদ্যমান মডেল আপডেট করতে বা না পাওয়া গেলে একটি নতুন মডেল তৈরি করতে চান। updateOrCreate পদ্ধতি এক ব্যক্তিকে ধারণ করে। firstOrCreate পদ্ধতির সানুকূল, updateOrCreate মডেলের স্থায়ীকরণ করে, তাই save() কলের প্রয়োজন নেই:

// যদি অকল্যান্ড থেকে সান ডিয়েগো রওনা করা একটি ফ্লাইট থাকে তবে মূল্য 99 ডলার নির্ধারণ করুন।
// যদি পাওয়া মডেল না থাকে তবে একটি নতুন তৈরি করুন।
$flight = app\model\Flight::updateOrCreate(
    ['departure' => 'Oakland', 'destination' => 'San Diego'],
    ['price' => 99, 'discounted' => 1]
);

মডেল মুছুন

আপনি delete পদ্ধতিটি মডেল ইনস্ট্যান্সে কল করে ইনস্ট্যান্সটি মুছতে পারবেন:

$flight = app\model\Flight::find(1);
$flight->delete();

প্রধান কী দ্বারা মডেল মুছুন

app\model\Flight::destroy(1);

app\model\Flight::destroy(1, 2, 3);

app\model\Flight::destroy([1, 2, 3]);

app\model\Flight::destroy(collect([1, 2, 3]));

অনুসন্ধান করে মডেল মুছুন

$deletedRows = app\model\Flight::where('active', 0)->delete();

মডেল কপি করুন

আপনি replicate পদ্ধতি ব্যবহার করে একটি নতুন মডেল ইনস্ট্যান্স কপি করতে পারেন যা এখনও ডেটাবেসে সংরক্ষিত হয়নি, যখন মডেল ইনস্ট্যান্সের অনেক সমান বৈশিষ্ট্য রয়েছে তখন এই পদ্ধতি খুব সহায়ক হয়।

$shipping = App\Address::create([
    'type' => 'shipping',
    'line_1' => '123 Example Street',
    'city' => 'Victorville',
    'state' => 'CA',
    'postcode' => '90001',
]);

$billing = $shipping->replicate()->fill([
    'type' => 'billing'
]);

$billing->save();

মডেল তুলনা

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

if ($post->is($anotherPost)) {
    //
}

মডেল পর্যবেক্ষক

রেফারেন্স ব্যবহার করুন Laravel এ মডেল ইভেন্ট এবং পর্যবেক্ষক

সতর্কতা: Eloquent ORM-এ মডেল পর্যবেক্ষক সমর্থন করতে অতিরিক্ত ইনস্টল করতে হবে composer require "illuminate/events"

<?php
namespace app\model;

use support\Model;
use app\observer\UserObserver;

class User extends Model
{
    public static function boot()
    {
        parent::boot();
        static::observe(UserObserver::class);
    }
}

লেনদেন

ডেটাবেস লেনদেন দেখুন