လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Laravel တွင် Next_result () အတွက်အထောက်အပံ့နည်းလမ်းများ encapsatate

Laravel တွင် Next_result () အတွက်အထောက်အပံ့နည်းလမ်းများ encapsatate

gitbox 1970-01-01

ဒေတာဘေ့စ်လုပ်ငန်းများအတွက် Laravel ကိုအသုံးပြုသောအခါစီးပွားရေးယုတ္တိဗေဒကိုကိုင်တွယ်ရန် Eloquent Orm သို့မဟုတ် Query Refuer ကို အသုံးပြု. ကျွန်ုပ်တို့အများအားဖြင့်အသုံးပြုကြသည်။ သို့သော်ကျွန်ုပ်တို့သည်ပိုမိုရှုပ်ထွေးသောဒေတာဘေ့စ်စစ်ဆင်ရေးများနှင့်ရင်ဆိုင်ရသောအခါရလဒ်အစုအဝေးများကိုပြန်ပို့သောသိုလှောင်ထားသည့်လုပ်ထုံးလုပ်နည်းများကိုပိုမိုများပြားလာသည်

ဤဆောင်းပါးသည်လာဗက်ရှိ Nexcrasult () Laravel ရှိပံ့ပိုးမှုနည်းလမ်းများသည်ဒေတာဗတ်စ်၏လုပ်ငန်းလည်ပတ်မှု၏ပြောင်းလွယ်ပြင်လွယ်မှုများကိုတိုးတက်စေရန် Laravel ရှိပံ့ပိုးမှုနည်းလမ်းများသည်အထူးသဖြင့် Multi-very protrescries လုပ်ငန်းခွင်တွင်ပိုမိုကောင်းမွန်စေသည်။

1 ။ ပြ problem နာနောက်ခံ

အချို့သောရှုပ်ထွေးသောအစီရင်ခံစာများ (သို့) Multi-effection query certory pamarios များတွင်အထူးသဖြင့် MySQL သိုလှောင်မှုဆိုင်ရာလုပ်ထုံးလုပ်နည်းများတွင်ရွေးချယ်မှုမျိုးစုံ) အချို့ဒေတာဘေ့စ်လုပ်ငန်းများအတွက်ရလဒ်များစွာရှိသည်။ Laravel's default database abstrace abstrace အလွှာသည် Next_result () ကိုတိုက်ရိုက်ထောက်ခံမှုမပေးချေ။

2 ။ Jew_result ကို သုံး. ဥပမာများဥပမာ ()

သင့်တွင်အောက်ပါ MySQL သိမ်းဆည်းထားသောလုပ်ထုံးလုပ်နည်းများရှိသည်ဆိုပါစို့။

 DELIMITER //
CREATE PROCEDURE GetUserStats(IN userId INT)
BEGIN
    SELECT * FROM users WHERE id = userId;
    SELECT COUNT(*) AS post_count FROM posts WHERE user_id = userId;
END //
DELIMITER ;

ဤလုပ်ထုံးလုပ်နည်းကိုခေါ်ဆိုခြင်းရလဒ်နှစ်ခုကိုပြန်ပို့လိမ့်မည်။ တစ်ခုမှာအသုံးပြုသူအချက်အလက်ဖြစ်ပြီးအခြားအသုံးပြုသူအတွက်ဆောင်းပါးအရေအတွက်ဖြစ်သည်။

3 ။ Laravel တွင် Encapsulations အစီအစဉ်

1 ။ ဒေတာဘေ့စ် connection class ကိုတိုးချဲ့ပါ

ရလဒ်အလုံးစုံကိုကိုင်တွယ်ရန်အထောက်အကူပြုစာတန်းများကိုကျွန်ုပ်တို့ဖန်တီးနိုင်သည်။

 namespace App\Support;

use Illuminate\Support\Facades\DB;

class MultiResultSet
{
    protected $connection;

    public function __construct()
    {
        $this->connection = DB::connection()->getPdo();
    }

    public function callProcedure(string $procedure, array $bindings = [])
    {
        $stmt = $this->connection->prepare("CALL {$procedure}");
        $stmt->execute($bindings);

        $results = [];

        do {
            $result = $stmt->fetchAll(\PDO::FETCH_ASSOC);
            if ($result) {
                $results[] = $result;
            }
        } while ($stmt->nextRowset());

        return $results;
    }
}

2 ။ ဥပမာကိုသုံးပါ

Multi-rights ပြန်လည်ရောက်ရှိမှုကိုကိုင်တွယ်ရန်ဤအတန်းကိုခေါ်ပါ။

 use App\Support\MultiResultSet;

$multi = new MultiResultSet();
$results = $multi->callProcedure('GetUserStats(?)', [1]);

$user = $results[0][0] ?? [];
$postCount = $results[1][0]['post_count'] ?? 0;

3 ။ ပြင်ဆင်မှုကြိုတင်ကာကွယ်မှုများ

  • သင် (ဥပမာ MySQL ကဲ့သို့သောရလဒ်အစုံများကိုထောက်ပံ့သောဒေတာဘေ့စ်ယာဉ်မောင်းကိုသင်အသုံးပြုနေကြောင်းသေချာပါစေ။

  • အကယ် . MySQL server တစ်ခုကြုံတွေ့ရပါက Laravel တွင်အမှားပျောက်ကွယ်သွားပါက Max_allowed_packet နှင့် connection timeout configuration ကိုစစ်ဆေးရန်လိုအပ်သည်။

4 ။ ကုဒ်ပြန်သုံးနိုင်မှုတိုးတက်စေရန်အကြံပြုချက်များ

ဤအင်္ဂါရပ်ကို ပိုမို. စွယ်စုံစေရန်ကျွန်ုပ်တို့အကြံပြုပါသည်။

  • ဝန်ဆောင်မှုပေးသူသို့မဟုတ် Laravel အဖြစ် enadsulated;

  • သစ်ထုတ်လုပ်ခြင်းနှင့်ခြွင်းချက်ကိုင်တွယ်ခြင်းထည့်ပါ။

  • ပြန်လာသောရလဒ်များကို format လုပ်ပါ (ဥပမာ DTO သို့မဟုတ် Collection သို့ပြောင်းလဲခြင်း) ။

V. နိဂုံးချုပ်

Laravel သည် Next_result ကိုတိုက်ရိုက်မထောက်ပံ့ပါ။ ရှုပ်ထွေးသောမေးမြန်းချက်များ, သတင်းပို့ခြင်းစနစ်များသို့မဟုတ်အမွေအနှစ်စနစ်များကိုရွှေ့ပြောင်းနေထိုင်စဉ်ကာလအတွင်းဒေတာဘေ့စ်အပြန်အလှန်ဆက်သွယ်မှုလိုအပ်ချက်များအတွက်ဤနည်းလမ်းသည်အထူးသဖြင့်သင့်လျော်သည်။

Laravel ၏အဖြစ်အပျက်ကိုနားထောင်ခြင်း, သစ်ထုတ်လုပ်ခြင်းသို့မဟုတ်သိုလှောင်ခြင်းကဲ့သို့သောဤအင်္ဂါရပ်ကိုထပ်မံချဲ့ထွင်ရန်သင်သည် https://gitbox.net သို့လည်း code paster များနှင့်လက်တွေ့အတွေ့အကြုံများဝေမျှခြင်းအတွက်လည်းဝင်ရောက်နိုင်သည်။