ارتباط شئ گرا با پایگاه داده
از کلاس dbObject
برای نمونه سازی جداول پایگاه داده استفاده می شود .
در این ارتباط برای هر جدول یک کلاس متناظر تعریف می شود . نام ستون ها در کلید های یک آرایه و در مقدار هر کدام اطلاعاتی از جمله نوع، اجباری و یکتا بودن هر ستون مشخص می شود.
مزیت این روش بر ارتباط مستقیم ، شئ گرا بودن این ارتباط و مشخص بودن نوع، اجباری و یکتا بودن هر ستون است . از تکرار چند باره بررسی مقادیر ستون ها جلوگیری کرده، در صورتی مقدار ستونی با آنچه مشخص شده مغایرت داشته باشد، یا مقداری برای ستون های اجباری مشخص نشده باشد و یا مقدار ستون های یکتا، تکراری باشد، به صورت خودکار قبل از ارسال درخواست برای پایگاه داده بررسی و با پرتاب استثناهای به ترتیب package\base\db\InputRequired
، package\base\db\InputDataType
و package\base\db\duplicateRecord
از ادامه روند جلوگیری خواهد کرد .
کلاس جدول users
<?php
namespace packages\packagename;
use packages\base\db\dbObject;
class user extends dbObject {
protected $dbTable = "users";
protected $primaryKey = "id";
protected $dbFields = array(
"firstname" => array("type" => "text", "required" => true),
"lastname" => array("type" => "text"),
"email" => array("type" => "text", "unique" => "true"),
"cellphone" => array("type" => "text", "required" => true, "unique" => "true"),
"password" => array("type" => "text", "required" => true),
"city" => array("type" => "int"),
"status" => array("type" => "int", "required" => true)
);
protected $relations = array(
"city" => array("hasOne", state\city::class, "type")
);
}
متد get
با استفاده از این متد میتوانید اطلاعات را به صورت دسته جمعی از پایگاه داده دریافت کنید . نوع بازگشتی این متد آرایه ای از شی های متناظر جدول درخواستی است . پارامتر اول تعداد ردیف ها و در پارامتر دوم، نام ستون و یا ستون های درخواستی از جدول را دریافت می کند .
$user = new user();
$user->get(limit, columns);
user::get(limit, columns);
مثال 1
$user = new user();
$users = $user->get(); // or user::get()
foreach ($users as $user) {
print_r($user->toArray());
}
/* output
array(
"id"=> 1,
"firstname" => "Sam smith",
"email" => "[email protected]"
);
array(
"id"=> 2,
"firstname" => "John",
"email" => "[email protected]"
);
*/
مثال 2
$user = new user();
$users = $user->get(null, array("firstname")); // or user::get(null, array("firstname"))
foreach ($users as $user) {
echo $user->firstname;
}
/* output
Sam smith
John
*/
متد getOne
با استفاده از این متد میتوانید ، اطلاعات فقط یک ردیف را از پایگاه داده دریافت کنید . نوع بازگشتی این متد یک شئ از کلاس متناظر است . این متد در پارامتر خود نام ستون و یا ستون های درخواستی از جدول را دریافت می کند .
$user = new user();
$user = $user->getOne(columns);
مثال 1
$user = new user();
$user = $user->getOne();
echo $user->id;
echo $user->firstname;
echo $user->email;
/* output
1
Sam smith
[email protected]
*/
مثال 2
$user = new user();
$user = $user->getOne(array("firstname", "email"));
echo $user->firstname;
echo $user->email;
/* output
Sam smith
[email protected]
\*/
متد getValue
این متد فقط مقدار یک ستون جدول را از پایگاه داده دریافت میکند . نوع بازگشتی این متد یک بسته به تعداد مقدار های بازگشتی میتواند یک مقدار ثابت و یا یک آرایه باشد که بسته به نوع ستون، نوع مقدار متفاوت خواهد بود . این متد در تنها پارامتر نام ستون دریافت میکند .
$user = new user();
$user->getValue(column);
مثال 1
$user = new user();
$count = $user->getValue("count(*)");
echo "{$count} users found";
$user = new user();
$username = $user->getValue("firstname");
echo "firstname is : {$username}";
متد where
با استفاده از این متد میتوانید در یک جدول ، ردیف هایی که فقط با شرط عنوان شده در این متد مطابقت دارند را دریافت کنید . پارامتر اول این متد نام ستون جدول و در پارامتر دوم مقدار شرط دریافت می شود .در پارامتر سوم نوع رابطه ی ستون و مقدار آن و در پارامتر چهارم ارتباط این شرط با شرط های دیگر مشخص میشود .
$user = new user();
$user->where(column, value, operator, cond);
مثال 1
$user = new user();
$user->where("id", 1);
$user = $user->getOne(array("firstname"));
/* output
Sam smith
*/
مثال 2
$user = new user()
$user->where("id", 1);
$user->where("firstname", "John", "=", "OR");
$users = $user->get();
foreach ($users as $user) {
echo $user->id;
echo $user->firstname;
echo $user->email;
}
/* output
1
Sam smith
[email protected]
2
John
[email protected]
*/
مثال 3
$user = new user();
$user->where("id", 2, ">=");
$users = $user->get(array("id", "firstname"));
foreach ($users as $user) {
echo $user->id;
echo $user->firstname;
}
/* output
2
John
\*/
متد byId
این متد برای دریافت یک ردیف با شناسه مشخص شده می باشد . این متد را میتوان با استفاده از دو متد where
و getOne
معادل سازی نمود .
$user = new user();
$user->byId(id);
user::byId(id);
مثال
$user = new user();
$user->where("id", 1);
$user = $user->getOne();
echo $user->firstname; // Sam smith
$user = user::byId(1);
echo $user->firstname; // Sam smith
متد orWhere
این متد معادل متد where
و مقدار OR
در پارامتر چهارم است .
$user = new user();
$user->orWhere(column, value, operator);
مثال
$user = new user()
$user->where("id", 1);
$user->orWhere("firstname", "John", "=");
$users = $user->get();
foreach ($users as $user) {
echo $user->id;
echo $user->firstname;
echo $user->email;
}
/* output
1
Sam smith
[email protected]
2
John
[email protected]
\*/
متد save
با فراخوانی این متد ، در صورتی که قبلا اطلاعات از پایگاه داده گرفته شده باشد، تغییرات در پایگاه داده بروزرسانی خواهند شد و در غیر این صورت با اطلاعات، یک ردیف جدید در جدول متناظر ایجاد خواهد شد .
خروجی این متد، در صورت بروزرسانی و یا ذخیره موفق اطلاعات در پایگاه اطلاعات true
و در غیر اینصورت false
خواهد بود .
$user = new user();
$user->save();
مثال 1
$user = new user();
$user->where("id", 1);
$user = $user->getOne();
echo $user->firstname; // Sam smith
$user->firstname = "something else";
$user->save();
// update users set firstname = "something else" where id = 1
echo $user->firstname; // something else
مثال 2
$user = new user();
$user->firstname = "Jack";
$user->email = "[email protected]";
$user->save();
// insert new user with Jack for firstname
متد delete
این متد برای حذف ردیف جدول استفاده میشود . در صورتی که قبل از این متد با استفاده از متد where
شرطی گذاشته نشود ، تمامی ردیف های آن جدول حذف خواهند شد .
نوع بازگشتی این متد در صورت حذف ردیف true
و در غیر این صورت false
خواهد بود .
$user = new user();
$user->delete();
مثال 1
$user = new user();
$user->where("id", 1);
$result = $user->delete();
if ($result) {
echo "successfully deleted";
}
متد orderBy
از این متد برای چینش ردیف های گرفته شده از پایگاه داده استفاده میشود . این متد در پارامتر اول نام ستون و در پارامتر دوم نوع چینش صعودی و یا نزولی ردیف ها را دریافت می کند .
$user->orderBy(orderByField, orderbyDirection);
مثال 1
$user = new user();
$user->orderBy("id", "DESC");
$users = $user->get();
foreach ($users as $user) {
echo $user->id;
echo $user->firstname;
}
/* output
5
Jack
4
John
1
Sam smith
*/
مثال 2
$user = new user();
$user->orderBy("name", "ASC");
$users = $user->get(null, array("firstname"));
foreach ($users as $user) {
echo $user->firstname;
}
/* output
John
Sam smith
*/
متد groupBy
از این متد برای یکسان سازی اطلاعات دریافتی (حذف ردیف های با مقدار های تکراری در ستون مشخص شده) از پایگاه داده استفاده میشود . در پارامتر این متد نام ستون دریافت می شود .
$user = new user();
$user->groupBy(groupByField);
مثال 1
$users = user::get(null, array("firstname"));
foreach ($users as $user) {
echo $user->firstname;
}
/* output
Sam smith
Sam smith
*/
$user = new user();
$user->groupBy("firstname");
$users = $user->get(null, array("firstname"));
/* output
Sam smith
*/
متد has
از این متد برای بررسی وجود و یا عدم وجود اطلاعات در پایگاه داده استفاده می شود .
خروجی این متد در صورت یافتن ردیفی با شرایطی که قبل از آن تعریف شده باشد ، true
و در غیر اینصورت false
خواهد بود .
$user = new user();
$user->has();
مثال 1
$user = new user();
$user->where("email", "[email protected]");
$has = $user->has();
if ($has) {
return "the email address already taken";
}