PMP နှင့် PDO ကိုနေ့စဉ်အခြေခံအားဖြင့်အသုံးပြုသောအခါ PDostatement :: Fetchobjection သည်အလွန်အဆင်ပြေသောနည်းလမ်းတစ်ခုဖြစ်ပြီး, သို့သော်ပုံမှန်အားဖြင့်၎င်းကိုသာဖန်တီးနိုင်ပြီးပိုမိုရှုပ်ထွေးမှုကိုအလိုအလျောက်ကိုင်တွယ်လိမ့်မည်မဟုတ်ပါ။ ပရိုဖိုင်း အရာဝတ်ထုတစ်ခုကိုအသိုက်ကိုအသိုက်လုပ်ရန် အသုံးပြုသူ အရာ 0 တ်ထုကဲ့သို့သောအသိုက်အဖုံးများပါ 0 င်လိုပါကသင်ကိုယ်တိုင်လုပ်ဆောင်ရန်လိုအပ်သည်။
ဒီရည်မှန်းချက်ကိုတစ်ဆင့်ပြီးအောင်ဘယ်လိုအောင်မြင်ရမယ်ဆိုတာကြည့်ရအောင်။
မင်းမှာဒီလိုစားပွဲနှစ်ခုရှိတယ်ဆိုပါစို့။
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(100),
profile_id INT
);
CREATE TABLE profiles (
id INT PRIMARY KEY,
bio TEXT,
avatar_url VARCHAR(255)
);
သင်သည်အသုံးပြုသူအချက်အလက်များကိုမေးမြန်းလိုပြီး ပရိုဖိုင်း အရာဝတ်ထုတစ်ခုကိုအသိုက်လုပ်နေစဉ် အသုံးပြုသူ အရာဝတ်ထုသို့ပြောင်းလဲလိုသည်။
ဥပမာအားဖြင့်, ငါဒီဆင်တူဖွဲ့စည်းပုံရဖို့မျှော်လင့်ပါတယ်:
User {
id => 1,
name => 'Alice',
profile => Profile {
id => 2,
bio => 'Hello world!',
avatar_url => 'https://gitbox.net/uploads/avatar.jpg'
}
}
အသုံးပြုသူ နှင့် ပရိုဖိုင်း အတွက် PHP အတန်းများကိုဖန်တီးရန်လိုအပ်သည်။
class Profile {
public int $id;
public string $bio;
public string $avatar_url;
}
class User {
public int $id;
public string $name;
public Profile $profile;
}
ဇယားနှစ်ခုမှဒေတာများကိုတစ်ချိန်တည်းတွင်ရယူရန် joiness joint မေးမြန်းမှုကိုသင်အသုံးပြုနိုင်သည်။
$sql = "
SELECT
u.id AS user_id,
u.name AS user_name,
p.id AS profile_id,
p.bio AS profile_bio,
p.avatar_url AS profile_avatar_url
FROM users u
JOIN profiles p ON u.profile_id = p.id
";
$stmt = $pdo->query($sql);
FetchOccoboject ကို ပုံမှန်အားဖြင့်အချက်အလက်အလွှာတစ်ခုသာသာမြေပုံများကိုသာသာမြေပုံများကိုသာ သတ်မှတ်. မိမိကိုယ်ကိုအသိုက်အကျင့်များကိုစုသိမ်းရန်လိုအပ်သည်။ သင်ဤသို့လုပ်နိုင်သည် -
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$user = new User();
$user->id = (int) $row['user_id'];
$user->name = $row['user_name'];
$profile = new Profile();
$profile->id = (int) $row['profile_id'];
$profile->bio = $row['profile_bio'];
$profile->avatar_url = $row['profile_avatar_url'];
$user->profile = $profile;
// ယခု $user ၎င်းတွင်အသိုက်ပါရှိသည် Profile ၏အရာဝတ်ထု
var_dump($user);
}
သင်ဤအရာကိုကိုင်တွယ်ရန်မကြာခဏလိုအပ်ပါက၎င်းကို gadget function တစ်ခုထဲသို့သင်ခန်းစာယူနိုင်သည်။
function mapRowToUser(array $row): User {
$user = new User();
$user->id = (int) $row['user_id'];
$user->name = $row['user_name'];
$profile = new Profile();
$profile->id = (int) $row['profile_id'];
$profile->bio = $row['profile_bio'];
$profile->avatar_url = $row['profile_avatar_url'];
$user->profile = $profile;
return $user;
}
// အသုံးပြု
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$user = mapRowToUser($row);
var_dump($user);
}
PDostatement :: FetchObjectObject ကိုယ်နှိုက်သည်အသိုက်အရာ 0 တ်ထုများကိုတိုက်ရိုက်မဖန်တီးနိုင်ပါ။ ဤနည်းလမ်းသည်ပိုမိုလုံခြုံစိတ်ချရလွယ်ကူပြီးရိုးရှင်းသောခင်းကျင်းခြင်းထက် ပို. လုံခြုံသည်။
အကယ်. သင်သည်ပိုမိုရိုးရှင်းလိုပါကဤမြေပုံများကိုအလိုအလျောက်ဆက်လက်လုပ်ဆောင်ရန်အတွက် Orm tools များ (eloquent, donstrine) ကိုပေါင်းစပ်ရန်စဉ်းစားနိုင်သည်။