ဒေတာဘေ့စ်လုပ်ငန်းများအတွက် PDO ကိုအသုံးပြုသောအခါ PDostatement :: Fetterobjection သည်အလွန်အဆင်ပြေသောနည်းလမ်းတစ်ခုဖြစ်ပြီး, သို့သော် default, default အနေဖြင့်ဒေ တာ ဘေ့စ်သည်လယ်ကွင်းများကို underscores နှင့်အတူပြန်လည်ရောက်ရှိသို့မဟုတ်ကွဲပြားခြားနားသောစတိုင်များတွင်ဖော်ပြထားလျှင်, ဤဆောင်းပါးသည်ဤအခြေအနေကိုလျောက်ပတ်စွာမည်သို့ကိုင်တွယ်ရမည်ကိုအသေးစိတ်ရှင်းပြပါမည်။
သင်၏ဒေတာဘေ့စ်စားပွဲ အသုံးပြုသူများသည် အောက်ပါနယ်ပယ်များရှိပါစေ။
သတ်
user_name
အီးမေးလ်လိပ်စာ
ယေဘုယျအားဖြင့်ကျွန်ုပ်တို့သည်ဤအရာကိုမေးမြန်းနိုင်သည်။
<?php
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'root', 'password');
$stmt = $pdo->query('SELECT id, user_name, email_address FROM users WHERE id = 1');
$user = $stmt->fetchObject();
echo $user->id; // ပုံမှန် output ကို
echo $user->user_name; // ပုံမှန် output ကို
echo $user->email_address; // ပုံမှန် output ကို
?>
အရာအားလုံးဒီမှာချောချောမွေ့မွေ့ကြည့်ရှုသည်။ သို့သော်သင်၏ entity အတန်းအစား ( အသုံးပြုသူ ကဲ့သို့) သည် Username နှင့် Emailaddress ကဲ့သို့သော camel naming ကိုအသုံးပြုပါက FetchOccess ('user) ကို အသုံးပြုခြင်းသည်မှန်ကန်စွာသတ်မှတ်ထားခြင်းမပြုပါ။
ဘာဖြစ်လို့လဲဆိုတော့ FetchObjectobject ကို Database မှပြန်လာသောကော်လံအမည်များအရအရာဝတ်ထု attribute များသို့တိုက်ရိုက်သတ်မှတ်ထားခြင်းကြောင့်ဖြစ်သည်။ ဒေတာဘေ့စ်ရှိကွက်လပ်များ ( user_name ) သည် ( user_name ) သည်အရာ 0 တ်ထုများဖြစ်သည်။
ဥပမာအားဖြင့်အောက်ပါ အသုံးပြုသူ အတန်းအစား -
<?php
class User {
public int $id;
public string $userName;
public string $emailAddress;
}
?>
$ stmt-> feterobjectobjectobject ('user') ကို တိုက်ရိုက်သုံးပါ။ Username နှင့် Emailaddress တို့သည် တန်ဖိုးကိုမရနိုင်ပါ။
အရိုးရှင်းဆုံးနှင့်ရေနံစိမ်းနည်းသောနည်းလမ်းမှာ SQL ကိုမေးမြန်းသောအခါအရာဝတ်ထု attribute name နှင့်ကိုက်ညီသော alias ကိုပေးရန်ဖြစ်သည်။
<?php
$stmt = $pdo->query('
SELECT
id,
user_name AS userName,
email_address AS emailAddress
FROM users
WHERE id = 1
');
$user = $stmt->fetchObject('User');
echo $user->userName; // မှန်ကန်သော output ကို
echo $user->emailAddress; // မှန်ကန်သော output ကို
?>
ဤနည်းလမ်းသည် entity အတန်းကိုပြုပြင်မွမ်းမံခြင်းမရှိဘဲရိုးရှင်းပြီးတိုက်ရိုက်ဖြစ်သည်။ သို့သော်မေးမြန်းမှုနယ်ပယ်များနှင့်ရှုပ်ထွေးသောစားပွဲများစွာရှိပါက၎င်းကိုထိန်းသိမ်းရန်လွယ်ကူသည်။
အကယ်. သင်သည် SQL ကိုမလှည့်စားနေသောနယ်ပယ်အမည်များကိုသိမ်းဆည်းလိုပါကသင် array ကိုကိုယ်တိုင်ယူပြီးအရာဝတ်ထုကိုသတ်မှတ်နိုင်သည်။
<?php
$stmt = $pdo->query('SELECT id, user_name, email_address FROM users WHERE id = 1');
$data = $stmt->fetch(PDO::FETCH_ASSOC);
$user = new User();
$user->id = $data['id'];
$user->userName = $data['user_name'];
$user->emailAddress = $data['email_address'];
echo $user->userName; // မှန်ကန်သော output ကို
?>
ဒါကပြောင်းလွယ်ပြင်လွယ်ပေမယ့်ရေးဖို့ခက်ခဲသည်။ သင်ဟာတန်ဖိုးမထားတဲ့အချိန်တိုင်းမှာတန်ဖိုးများကိုကိုယ်တိုင်ခွဲထားရမယ်။
သင်ပိုမိုအလိုအလျောက်ဖြစ်လိုပါကဒေတာဘေ့စ်လယ်သို့အလိုအလျောက်ပြောင်းလဲစေသည့်သေးငယ်သော function တစ်ခုကိုသင်ရေးနိုင်သည်။ ထို့နောက်တန်ဖိုးကိုအရာဝတ်ထုအတွက်တန်ဖိုးကိုသတ်မှတ်နိုင်သည်။
<?php
function snakeToCamel(string $string): string {
return lcfirst(str_replace(' ', '', ucwords(str_replace('_', ' ', $string))));
}
function mapToEntity(array $data, string $className) {
$object = new $className();
foreach ($data as $key => $value) {
$property = snakeToCamel($key);
if (property_exists($object, $property)) {
$object->$property = $value;
}
}
return $object;
}
// အသုံးပြုမှုဥပမာ
$stmt = $pdo->query('SELECT id, user_name, email_address FROM users WHERE id = 1');
$data = $stmt->fetch(PDO::FETCH_ASSOC);
$user = mapToEntity($data, 'User');
echo $user->userName; // မှန်ကန်သော output ကို
?>
ဤနည်းအားဖြင့်သင်သည်ပြောင်းလဲခြင်းယုတ္တိဗေဒကိုတစ်ကြိမ်ရေးသားရန်လိုအပ်ပြီးနောက်ဆက်တွဲမေးမြန်းချက်အားလုံးကိုအလိုအလျောက်လုပ်ဆောင်နိုင်သည်။
Fetchobject သည်ရိုးရှင်းသောနှင့်အစာရှောင်ခြင်းအချက်အလက်ရယူခြင်းအတွက်သင့်တော်သည်။ ရှုပ်ထွေးသောယုတ္တိဗေဒလိုအပ်သည်ဆိုပါက Orm Framework ကိုအသုံးပြုရန်အတွက် Orm Framework ကိုသုံးရန်အကြံပြုသည်။
Entity အတန်းအစား၏ attribute များသည် အများပြည်သူ ဖြစ်သည်ကိုသေချာစေပါ ။
attribute တွေကိုကာကွယ်ဖို့လိုအပ်မယ်ဆိုရင်တာဝန်ကျတဲ့နေရာကိုကိုင်တွယ်ရန်ဆောက်လုပ်ရေးနည်းလမ်းသို့မဟုတ်မှော်နည်းလမ်း __set () နှင့်ပူးပေါင်းသင့်သည်။
PDostatement :: fetchobject သည်အဆင်ပြေသော်လည်းဂရုတစိုက်ဖြစ်သည်။ အကယ်. လယ်ကွင်းအမည်တပ်ထားသောပုံစံကိုထပ်တူပြုခြင်းမရှိပါက SQL တွင် alias ကိုသုံးရန်အကြံပြုသည်, သို့မဟုတ် code ကိုသန့်ရှင်းပြီးသင့်ကိုယ်ပိုင်မြေပုံနည်းလမ်းကိုရေးရန်အကြံပြုသည်။ အလတ်စားနှင့်ကြီးမားသောစီမံကိန်းများအတွက်အမှားများကိုလျှော့ချရန် Entity Mapping ကိုစီမံရန်ရင့်ကျက်သော Orm Libraries များကိုတိုက်ရိုက်အသုံးပြုရန်လည်းအကြံပြုပါသည်။
PDO, Database Optimization သို့မဟုတ် Entity Mapping တွင်ပိုမိုအဆင့်မြင့်သောအကြံဥာဏ်များကိုသင်မြင်လိုပါကကျွန်ုပ်တို့၏နည်းပညာ Blog https://gitbox.net/blog သို့သွားနိုင်သည်။