डेटाबेस मॉडल Model का उपयोग (Laravel शैली)

webman मॉडल Eloquent ORM पर आधारित है। प्रत्येक डेटाबेस तालिका का एक संबंधित "मॉडल" होता है जो उस तालिका के साथ इंटरैक्ट करता है। आप मॉडल के माध्यम से डेटाबेस तालिका में डेटा की क्वेरी कर सकते हैं और डेटाबेस तालिका में नए रिकॉर्ड डाल सकते हैं।

शुरू करने से पहले, सुनिश्चित करें कि आपने config/database.php में डेटाबेस कनेक्शन कॉन्फ़िगर किया है।

ध्यान दें: Eloquent ORM को मॉडल अवलोकक (observer) का समर्थन करने के लिए अतिरिक्त चीज़ें आयात करने की आवश्यकता होती है 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
{
    /**
     * स्वचालित रूप से बढ़ने वाले ID का “प्रकार”।
     *
     * @var string
     */
    protected $keyType = 'string';
}

टाइमस्टैम्प

डिफ़ॉल्ट रूप से, Eloquent की अपेक्षा है कि आपकी डेटाबेस तालिका में created_at और updated_at मौजूद हैं। यदि आप नहीं चाहते कि Eloquent अपने आप इन दो कॉलमों का प्रबंधन करे, तो कृपया अपने मॉडल में $timestamps प्रॉपर्टी को false पर सेट करें:

class User extends Model
{
    /**
     * स्वचालित रूप से टाइमस्टैम्प बनाए रखने का संकेत करें
     *
     * @var bool
     */
    public $timestamps = false;
}

यदि आपको टाइमस्टैम्प के प्रारूप को कस्टमाइज़ करने की आवश्यकता है, तो अपने मॉडल में $dateFormat प्रॉपर्टी सेट करें। यह प्रॉपर्टी निर्धारित करती है कि डेट अभिव्यक्तियों को डेटाबेस में कैसे संग्रहीत किया जाता है, और मॉडल को एरे या JSON में श्रंखला में परिवर्तित करते समय यह किस प्रकार होगा:

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 विधि आपको डेटाबेस पर कर्सर का उपयोग करके डेटा को पार करने की अनुमति देती है, यह केवल एक बार क्वेरी निष्पादित करती है। जब बड़ी मात्रा में डेटा पार किया जाता है, तो कर्सर विधि मेमोरी के उपयोग को काफी कम कर सकती है:

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']);

// नाम के द्वारा उड़ान की खोज करें, या नाम और देरी प्रॉपर्टी और arrival_time प्रॉपर्टी का उपयोग करके ...
$flight = app\model\Flight::firstOrCreate(
    ['name' => 'Flight 10'],
    ['delayed' => 1, 'arrival_time' => '11:30']
);

// नाम के द्वारा उड़ान की खोज करें, यदि मौजूद नहीं है तो एक उदाहरण बनाएं ...
$flight = app\model\Flight::firstOrNew(['name' => 'Flight 10']);

// नाम के द्वारा उड़ान की खोज करें, या नाम और देरी प्रॉपर्टी और arrival_time प्रॉपर्टी का उपयोग करके एक मॉडल उदाहरण बनाएं ...
$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);
    }
}

लेनदेन

देखें डेटाबेस लेनदेन