AR العربية
الإصدار: v2.3.0

raw

يوفر Medoo تعبيرات SQL خام للاستعلامات المعقدة والقابلة للتخصيص بدرجة عالية. كما تدعم هذه التعبيرات العناصر النائبة لتقليل خطر حقن SQL، إلى جانب صياغة مختصرة لاقتباس المعرّفات.

Medoo::raw($query, $map)

الصياغة

توفّر تعبيرات Raw SQL طريقة مختصرة لاقتباس المعرّفات. استخدم <name> للإشارة إلى اسم عمود أو عمود مع اسم الجدول، وسيتولى Medoo إضافة علامات الاقتباس المناسبة تلقائيًا.
Medoo::raw("AVG(<weight>)")

للأعمدة

يمكنك استخدام كائن Raw ضمن قائمة الأعمدة في select() أو get(). وسيصبح مفتاح المصفوفة هو الاسم المستعار في النتيجة.
$data = $database->get('account', [
	'user_name',
	'score' => Medoo::raw('SUM(<age> + <experience>)')
], [
	'user_id' => 100
]);
SELECT "user_name", SUM("age" + "experience") AS "score"
FROM "WP_account"
WHERE "user_id" = 100

لعمليات التحديث والإدراج

يمكن أيضًا استخدام كائنات Raw كقيم للأعمدة في insert() وupdate().
$data = $database->insert('account', [
	'user_name' => 'apple',
	'user_id' => Medoo::raw('UUID()')
]);

$data = $database->update('account', [
	'user_name' => 'apple',
	'user_id' => Medoo::raw('UUID()')
], [
	'age[>]' => 10
]);

لشروط WHERE

يمكن استخدام كائنات Raw داخل مصفوفة where لبناء تعبيرات أكثر تقدمًا.
$data = $database->select('account', [
	'user_name',
	'user_id',
], [
	'datetime[>=]' => Medoo::raw('DATE_SUB(NOW(), INTERVAL 1 DAY)'),
	'ORDER' => Medoo::raw('RAND()'),
	'LIMIT' => 10
]);
SELECT "user_name", "user_id"
FROM "account"
WHERE "datetime" >= DATE_SUB(NOW(), INTERVAL 1 DAY)
ORDER BY RAND()
LIMIT 10

مع العبارات المُحضَّرة

إذا كانت تعبيرات Raw تتضمن قيمًا من متغيرات أو من إدخال المستخدم، فاستخدم العناصر النائبة مع عبارة مُحضَّرة لتقليل خطر حقن SQL.
$today = "2017-05-01";

$database->select('account', [
	'user_id',
	'user_name'
], [
	'datetime' => Medoo::raw('DATE_ADD(:today, INTERVAL 10 DAY)', [
		':today' => $today
	])
]);

كشرط WHERE كامل

يمكنك أيضًا استخدام كائن Raw كشرط WHERE كامل لعمليات التصفية المتقدمة.
$data = $database->select('account', [
		'user_id',
		'email'
	],
	Medoo::raw('WHERE
		LENGTH(<user_name>) > 5
		ORDER BY RAND()
		LIMIT 10
	')
);
SELECT "user_id", "email"
FROM "account"
WHERE LENGTH("user_name") > 5
ORDER BY RAND()
LIMIT 10