تیشرت Laravel
خرید
اطلاعات بیشتر

آموزش کار با دیتابیس ها در zend framework

تبلیغات
کانال تلگرام فتولیا

سلام ;

در بخش اول آموزش زند فریم ورک  ،نحوه نصب و ایجاد یک سایت ساده را یاد گرفتیم .اما برای کارهای بزرگتر ، باید اطلاعات جامعی تر در مورد این فریم ورک داشته باشیم.برای همین در این بحث می خواهیم در مورد نحوه کار با دیتابیس در زند توضیحاتی بدهیم .لطفا با ما باشید .در ابتدا از goback عزیز (http://goback.blogfa.com) که زحمت ترجمه این مقاله رو کشیدند ، تشکر می کنم.

Zend_Db

کتابخانه Zend_Db_Adapter به ما این امکان را می دهد تا با سیستم های مختلف بانک اطلاعاتی (DBMS) ها کار کنیم.

استفاده از درایورهای PDO

  • برای استفاده از RMDB2 و IDS از اکستنشن pdo_ibm استفاده می شود.
  • برای استفاده از MYSQL از اکستنشن مربوط به PHP با نام pdo_mysql  استفاده می شود.
  • برای استفاده از MSSQLاز اکستنشن pdo_mssql استفاده می شود.
  • برای استفاده از Oracle از اکستنشن pdo_oci استفاده میشود.
  • برای استفاده از PostgreSQL از اکستنشن pdo_pgsql استفاده میشود.
  • و برای استفاده از SQLite از اکستنشن مربوط به PHP با نام pdo_sqlite  استفاده خواهد شد.

استفاده از اکستنشنهای PHP

  • برای استفاده از MySQL از اکستنشن mysqli  استفاده می شود.
  • برای استفاده از Oracle  از اکستنشن مربوط به PHP با نام oci8  استفاده میشود.
  • برای استفاده از IBM DB2از اکستنشن ibm_db2 استفاده می شود.
  • برای استفاده از Firebird / Interbase از اکستنشن php_interbase استفاده میشود.

ما در این مقاله از درایورهای PDO برای کار با MySQL استفاده می کنیم.

شروع کار

برای ذخیره اطلاعات مربوط به نحوه اتصال به دیتابیس ،به یک فایل تنظیمات نیاز داریم،برای این کار ما یه فایل با نام application.ini در مسیر /application/configs می سازیم، حالا خطوط زیر رو به فایل مربوطه اضافه کنید:

 

db.adapter          = "pdo_mysql"
	db.params.host      = "localhost"
	db.params.username  = "root"
	db.params.password  = ""
	db.params.dbname    = "your_db_name_here"

 

فکر نمی کنم محتویاتی که نوشتیم خیلی برای تان سخت باشد.ما از Zend_Confg_Ini برای خوندن این فایل استفاده خواهیم کرد ولی باید قبل از عملیات dispatching ،ارتباط با دیتابیس برقرار شده باشد.خوب کد زیر را داخل فایل  index.php بنویسید:

	// Load up our config file
	$config = new Zend_Config_Ini('./application/configs/application.ini', 'db');

	$db = Zend_Db::factory($config->db->adapter,
				   $config-db->config->toArray());

	// Return data as object
	$db->setFetchMode(Zend_Db::FETCH_OBJ);

	// The default adapter for table classes
	Zend_Db_Table::setDefaultAdapter($db);

	// Write our adapter to registry
	Zend_Registry::set('db', $db);

 

در همین رابطه :   تشخیص لرزش موبایل با jQuery

‫اگر یک موقع دلتان نخواست که مقدار برگشتی از دیتابیس به صورت شی(object) باشد، می‌توانید از یکی از روش های زیر استفاده کنید:

Zend_Db:: FETCH_ASSOC : نتیجه را به مقادیری با آرایه های انجمنی(associative) میدهد،کلیدهای آرایه نام ستونها خواهند بود،این روش استخراخ به صورت پیشفرض در کلاسهای Zend_Db_Adapter استفاده می شود.
Zend_Db:: FETCH_NUM :نتیجه را به صورت آرایه ای از مقادیر با ایندکس های عددی برمیگرداند،این ایندکس ها به ترتیب موقعیت فیلدهایی هستند که در کوئری select تعیین شده اند.
Zend_Db:: FETCH_BOTH :این نتیجه را به صورت آرایه برمیگرداند،کلیدهای آرایه انجمنی و مقادیر عددی هستند،تو آرایه اگر از FETCH_ASSOC یا FETCH_NUM استفاده شود، تعداد المنتها دوبار می شوند .
Zend_Db:: FETCH_COLUMN :نتیجه را به صورت آرایه ای از مقادیر برمیگرداند، ‫‏مقداری از مقدارهای ‫‫یک ستون از مجموعه نتایج در هر آرایه.به صورت پیشفرض ستون اولی با صفر شماره گذاری می شود.
Zend_Db:: FETCH_OBJ :نتیجه را به صورت آرایه ای از اشیاء برمیگرداند،به صورت پیشفرض کلاس توکار stdClass که در خود PHP هست استفاده میشود.ستونهای نتیجه به صورت public در این شی در دسترس هستند.

شاید کجنجکاو شده باشید بدونید که چرا ما adapter را داخل registry ثبت کردیم.خب این کار برای این بود که به این adapter در همه ی کنترلر ها و مدلها دسترسی داشته باشیم.برای دسترسی به adapter از registry ما از متد Zend_Registry::get(); استفاده میکنیم.

Zend_Registry::get('db');

خب اجازه بدید یه درخواست به دیتابیس را اجرا کنیم

	$sql = 'SELECT * FROM users';
	$result = $db->fetchAll($sql);

محتوای متغیر $result از آرایه ای از آبجکتها خواهد بود،برای استخراج یک ستون از این نتایج ،باید به این صورت عمل کنیم:

	$sql = 'SELECT name, id FROM users';
	$result = $db->fetchCol($sql);

حالا متغیر $result فقط حاوی ستون name هست،برای استخراج یه سطر به تنهایی از کد زیر استفاده می کنیم:

	$sql = 'SELECT * FROM users WHERE id = 2';
	$result = $db->fetchRow($sql);

 و حالا مقدار $result یک شی بیشتر نیست ! .و برای بیرون کشیدن یک مقدار به تنهایی هم از زیر بهره می بریم.(چیزی شبیه به متغیر mysql_result در php) :

$sql = 'SELECT COUNT(*) FROM users';
	$result = $db->fetchOne($sql);

 و حالا نیز تعداد کاربران در متغیر $result قرار دارد.همه این پرس و جوهایی را که اجرا کردیم ، با select بودند ولی در ادامه می خواهیم نگاهی هم به روش افزودن ، ویرایش و حذف داده ها بیندازیم .لطفا با ما باشید.

در همین رابطه :   روش آسان اعتبارسنجی فیلدهای Email و URL در PHP

افزودن رکوردها

در زند ،یک تابع خاص برای اضافه کردن اطلاعات به دیتابیس وجود دارد.متدی با نام Insert از کلاس Zend_Db :

$data = array('name'  => 'Nick',
				  'login' => 'nick',
                  'email' => 'myemail@gmail.com');

	$db->insert('user', $data);
	$lastId = $db->lastInsertId();

 

اینجا باید دو پارامتر را به متد insert بدهیم،اولی اسم جدول و دومی یک آرایه انجمنی شامل نام فیلد ها و مقادیر هر کدام است.متد  lastInsertId مقدار مربوط به فیلدی که primary هست و خاصیت auto-increment دارد را برمیگرداند.

ویرایش رکوردها

برای ویرایش اطلاعات داخل دیتابیس باید از متد آپدیت استفاده کینم که سه آرگومان دارد،اولی اسم جدول،دومی آرایه ای انجمنی از اطلاعات،و سومی اگر شرطی در کوئری باشد ،در این پارامتر قرار میگیرد(یک آرگومان ضروری نیست).

 

	$data = array('name'  => 'Nick',
		          'login' => 'nick',
                  'email' => 'myemail@gmail.com');

	$db->update('user', $data, 'id = 1');

نکته : فقط یادتان باشد ،اگر این آرگومان سوم را ندهید،کل جدول تان به فنا خواهد رفت و همه رکوردها آپدیت می شوند

خذف رکوردها

برای حذف اطلاعات از متد delete استفاده می کنیم،این متد دو پارامتر میگیرد،اولی اسم جدول و دومی شرط مربوطه است،اینجا هم باید دقت کنید،اگر آرگومان دوم رو ندهید، کل داده های جدول حذف می شوند!

$db->delete('user', 'id = 1');

نکته : فقط یادتان باشد ،اگر این آرگومان سوم را ندهید،کل جدول تان به فنا خواهد رفت و همه رکوردها حذف می شوند

 تعدادی مثال از کدها

مثال ۱ :

	// Extract Zend_Db_Select
	$select = $db->select();	

	// ۱st - table name, 2nd - array of selecting columns
	$select->from('news', array('YEAR(date) AS yearNews',
		'MONTH(date) AS monthNews',
		'DAy(date) AS dayNews'));

مثال ۲ :

	// Extract Zend_Db_Select
	$select = $db->select();	

	// Descending sorting
	$select->from('news')->order('date DESC');
	$result = $db->fetchAll($select);

مثال ۳ :

	// Extract Zend_Db_Select
	$select = $db->select();	

	// Descending sorting by date and ascending by title field
	$select->from('news')
		->order(array('date DESC', 'title'));

	$result = $db->fetchAll($select);

مثال ۴ :

	// Extract Zend_Db_Select
	$select = $db->select();	

	// Descending sorting by date and ascending by title field
	$select->from(array('n' => 'news'), // table name and its alias
				array('newsTitle' => 'title', // The second parameter
						'newsDescription' => 'description', // column alias => column name
					'date' => 'date'))
			->join(array('a' => 'author'), // The first param for join method | alias => table name
					array('n.author = a.id'), // The 2nd param - array of condition for join operator
					array('name' => 'authorName')) // Associative array of columns
			->order('date DESC'); // Sorting descending by date column

	$result = $db->fetchAll($select);

 

در همین رابطه :   آموزش نصب ساده PHP و اتصال به MySQL در آن

Zend_Db_Select

 

Zend_Db_Select ابزاری برای ایجاد فوری کوئری های select به صورت تکه تکه است که کار ما را در انجام کوئری های پیچیده آسان می کند.

ایجاد کوئری ها 

برای مثال ،اگر بخواهیم یک پرس و جو ایجاد کنیم که اخبار را از جدول بیرون بکشیم ، کاری شبیه این انجام می دهیم:

SELECT * FROM news WHERE id = 12;

 ولی با استفاده از Zend_db_Select ، همین کار را به این شکل انجام می دهیم :

	// Extract Zend_Db_Select
	$select = $db->select();

	$select->from('news')->where('id = 12');
	$result = $db->fetchAll($select);

حالا اگر بخواهیم همه ی رکوردهای مربوط به اخبار را بیرون بکشیم ،ولی کلا در قالب سه ستون سال،ماه و روز باشد،اینطوری مینویسیم:

SELECT *, YEAR(date) AS yearNews,
	MONTH(date) AS monthNews,
	DAY(date) AS dayNews
FROM news;

SQL روشهای مختلفی برای عملیات join دارد ،در لیست زیر متدهایی از Zend_Db_Select هست که این عملیات مختلف را ساپورت میکند:

  • INNER JOIN, methods join (table, join, [columns]) and joinInner (table, join, [columns]).
  • LEFT JOIN, the method joinLeft (table, condition, [columns]).
  • RIGHT JOIN, the method joinRight (table, condition, [columns]).
  • FULL JOIN, the method joinFull (table, condition, [columns]).
  • CROSS JOIN, the method joinCross (table, [columns]).
  • NATURAL JOIN, the method joinNatural (table, [columns]).

یک بخش دیگر از آموزش های فریم ورک زند تمام شد .امیدوارم مورد استفاده علاقه مندان قرار گرفته باشد.

لطفا ما رو از نظرات تون بهره مند کنید :)

منبع

5 Comments

  1. سلام
    وب سایت خیلی قشنگی دارید ولی حیف فایل واسه دانلود نداره
    اگه میشه فایل های آموزش هاتون رو آپلود کنید من که پی اچ پی حرفه ای بلدم گیج شدم آخه منم دارم تازه شروع به یاد گیری آموزش هاتون میکنم اینجوری آمار سایتتون میره بالا .

    1. سلام goback عزیز

      پس از شما ممنونم :) این لینکی هم که دادید وسوسه کنندست .انشاالله اگر فرصتی دست بده ، سعی می کنم ترجمه اش کنم ولی فکر نمی کنم به این زودی ها بشه :(

      به هر حال ممنون
      موفقیت

پاسخ دادن به Goback لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

More in CSS
الحاق فونت دلخواه به صفحه با استفاده از css

سلام احتمالا در حال وبگردي سايت هايي را ديده ايد كه از فونت هاي عجيب و غريب استفاده مي كنند...

Close