Eloquent Queries

From binaryoption
Revision as of 13:09, 6 May 2025 by Admin (talk | contribs) (@CategoryBot: Обновлена категория)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
Баннер1

center|500px|شعار استعلامات Eloquent

استعلامات Eloquent: دليل شامل للمبتدئين

مقدمة

Eloquent هو نظام نموذج علاقات كائنات (ORM) متضمن في إطار عمل Laravel PHP. يوفر طريقة أنيقة وبديهية للتفاعل مع قواعد البيانات. بدلاً من كتابة استعلامات SQL مباشرة، يسمح لك Eloquent بالتفاعل مع البيانات باستخدام كائنات PHP. هذا يجعل الكود أكثر قابلية للقراءة، والصيانة، والأمان. هذا المقال يهدف إلى تقديم شرح مفصل لاستعلامات Eloquent للمبتدئين، مع التركيز على المفاهيم الأساسية والأمثلة العملية. سنغطي جوانب مختلفة مثل الاستعلامات الأساسية، والشروط، والترتيب، والتجميع، والعلاقات، والاستعلامات الفرعية، وقيود الاستعلام. فهم هذه المفاهيم ضروري لأي مطور Laravel.

المتطلبات الأساسية

قبل البدء، تأكد من أن لديك فهمًا أساسيًا للمفاهيم التالية:

الاستعلامات الأساسية

أبسط طريقة لاسترداد البيانات باستخدام Eloquent هي استخدام نموذج Eloquent.

  • `Model::all()`: تسترد جميع السجلات من الجدول المرتبط بالنموذج.
   مثال:
   ```php
   $users = User::all();  // تسترد جميع المستخدمين من جدول users
   ```
  • `Model::find($id)`: تسترد سجل واحد بناءً على مفتاحها الأساسي.
   مثال:
   ```php
   $user = User::find(1); // تسترد المستخدم الذي لديه معرف 1
   ```
  • `Model::where($column, $operator, $value)`: تسترد السجلات التي تطابق شرطًا معينًا.
   مثال:
   ```php
   $activeUsers = User::where('active', '=', true); // تسترد المستخدمين النشطين
   ```
  • `Model::first()`: تسترد السجل الأول الذي يطابق الشرط (أو السجل الأول في الجدول إذا لم يتم تحديد شرط).
   مثال:
   ```php
   $firstUser = User::where('email', '[email protected]')->first();
   ```
  • `Model::get()`: تسترد مجموعة من السجلات المطابقة للاستعلام.
   مثال:
   ```php
   $users = User::where('age', '>', 25)->get();
   ```

إضافة الشروط إلى الاستعلامات

يمكنك إضافة شروط مختلفة إلى استعلاماتك لتصفية البيانات بشكل أكثر دقة.

  • `where()`: كما ذكرنا سابقًا، تستخدم لتحديد شرط واحد.
  • `orWhere()`: تضيف شرطًا "أو" إلى الاستعلام.
   مثال:
   ```php
   $users = User::where('age', '>', 25)->orWhere('city', 'London');
   ```
  • `whereIn()`: تتحقق مما إذا كانت قيمة العمود موجودة في مصفوفة معينة.
   مثال:
   ```php
   $users = User::whereIn('id', [1, 2, 3]);
   ```
  • `whereNotIn()`: تتحقق مما إذا كانت قيمة العمود غير موجودة في مصفوفة معينة.
   مثال:
   ```php
   $users = User::whereNotIn('id', [4, 5, 6]);
   ```
  • `whereBetween()`: تتحقق مما إذا كانت قيمة العمود تقع بين قيمتين.
   مثال:
   ```php
   $users = User::whereBetween('age', [18, 30]);
   ```
  • `whereNotBetween()`: تتحقق مما إذا كانت قيمة العمود لا تقع بين قيمتين.
   مثال:
   ```php
   $users = User::whereNotBetween('age', [18, 30]);
   ```
  • `whereNull()`: تتحقق مما إذا كانت قيمة العمود فارغة (NULL).
   مثال:
   ```php
   $users = User::whereNull('email_verified_at');
   ```
  • `whereNotNull()`: تتحقق مما إذا كانت قيمة العمود غير فارغة (NOT NULL).
   مثال:
   ```php
   $users = User::whereNotNull('email_verified_at');
   ```

ترتيب النتائج

يمكنك ترتيب النتائج باستخدام دالة `orderBy()`.

  • `orderBy($column, $direction)`: تقوم بترتيب النتائج بناءً على عمود معين. `$direction` يمكن أن يكون `'asc'` (تصاعدي) أو `'desc'` (تنازلي).
   مثال:
   ```php
   $users = User::orderBy('name', 'asc')->get(); // ترتيب المستخدمين أبجديًا حسب الاسم
   $users = User::orderBy('age', 'desc')->get(); // ترتيب المستخدمين تنازليًا حسب العمر
   ```

تجميع النتائج

يمكنك تجميع النتائج باستخدام دوال `groupBy()` و `having()`.

  • `groupBy($column)`: تقوم بتجميع النتائج بناءً على عمود معين.
  • `having($column, $operator, $value)`: تضيف شرطًا إلى التجميع.
   مثال:
   ```php
   $userCounts = User::groupBy('city')->selectRaw('city, count(*) as user_count')->having('user_count', '>', 10)->get();
   ```

العلاقات (Relationships)

Eloquent يجعل التعامل مع العلاقات بين الجداول أمرًا سهلاً. هناك أنواع مختلفة من العلاقات، مثل:

  • `hasOne()`: علاقة واحد إلى واحد.
  • `hasMany()`: علاقة واحد إلى متعدد.
  • `belongsTo()`: علاقة متعدد إلى واحد.
  • `belongsToMany()`: علاقة متعدد إلى متعدد.
  • `morphTo()` و `morphOne()`, `morphMany()`: علاقات متعددة الأشكال.

مثال (علاقة `hasMany` بين `User` و `Post`):

في نموذج `User`:

```php public function posts() {

   return $this->hasMany(Post::class);

} ```

الآن يمكنك استرداد جميع منشورات مستخدم معين:

```php $user = User::find(1); $posts = $user->posts; ```

الاستعلامات الفرعية (Subqueries)

يمكنك استخدام الاستعلامات الفرعية لإنشاء استعلامات أكثر تعقيدًا.

مثال:

```php $users = User::where('id', function ($query) {

   $query->selectRaw('max(id)')->from('users');

})->get(); ```

هذا الاستعلام يسترد المستخدم الذي لديه أعلى معرف.

قيود الاستعلام (Query Constraints)

يمكنك استخدام قيود الاستعلام لإعادة استخدام شروط الاستعلام.

مثال:

```php $query = User::where('active', true); $admins = $query->where('role', 'admin')->get(); $editors = $query->where('role', 'editor')->get(); ```

الاستعلامات الخام (Raw Queries)

في بعض الحالات، قد تحتاج إلى كتابة استعلام SQL خام. يمكنك القيام بذلك باستخدام `DB::raw()`.

مثال:

```php $users = User::select(DB::raw('COUNT(*) as total_users'))->get(); ```

عمليات الإضافة والتعديل والحذف

  • `create()`: إنشاء سجل جديد.
  • `update()`: تحديث سجل موجود.
  • `delete()`: حذف سجل.

مثال:

```php $user = new User(); $user->name = 'John Doe'; $user->email = '[email protected]'; $user->save(); // إنشاء المستخدم

$user = User::find(1); $user->email = '[email protected]'; $user->save(); // تحديث المستخدم

User::find(1)->delete(); // حذف المستخدم ```

اعتبارات الأداء

  • استخدم الفهرسة (Indexing) على الأعمدة التي تستخدمها في الشروط.
  • تجنب استرداد البيانات غير الضرورية (استخدم `select()` لتحديد الأعمدة التي تحتاجها فقط).
  • استخدم التخزين المؤقت (Caching) لتقليل عدد الاستعلامات التي يتم إجراؤها.
  • استخدم الاستعلامات المجمعة (Eager Loading) لتحسين أداء العلاقات. على سبيل المثال: `User::with('posts')->get();`

استراتيجيات تداول الخيارات الثنائية وتحليل البيانات

على الرغم من أن هذا المقال يركز على استعلامات Eloquent، فمن المهم ربط هذه المعلومات بتحليل البيانات الذي يمكن استخدامه في تداول الخيارات الثنائية. يمكن استخدام البيانات المستخرجة من قاعدة البيانات لتحليل:

  • **تحليل الاتجاهات:** تحديد الاتجاهات الصاعدة والهابطة في أسعار الأصول. تحليل الاتجاهات
  • **تحليل الحجم:** فهم حجم التداول وعلاقته بتحركات الأسعار. تحليل حجم التداول
  • **المؤشرات الفنية:** حساب المؤشرات الفنية مثل المتوسطات المتحركة، و RSI، و MACD. المؤشرات الفنية
  • **استراتيجيات التداول:** اختبار استراتيجيات تداول مختلفة بناءً على البيانات التاريخية. استراتيجيات التداول
  • **نماذج الشموع اليابانية:** التعرف على نماذج الشموع اليابانية التي تشير إلى انعكاسات محتملة في الأسعار. نماذج الشموع اليابانية
  • **استراتيجية مارتينجال:** استراتيجية تداول تعتمد على مضاعفة الرهان بعد كل خسارة. استراتيجية مارتينجال
  • **استراتيجية فيبوناتشي:** استخدام مستويات فيبوناتشي لتحديد نقاط الدعم والمقاومة. استراتيجية فيبوناتشي
  • **استراتيجية البولينجر باند:** استخدام نطاقات البولينجر لتحديد التقلبات المحتملة. استراتيجية البولينجر باند
  • **استراتيجية الاختراق:** تداول على أساس اختراق مستويات الدعم والمقاومة. استراتيجية الاختراق
  • **تداول الأخبار:** تداول بناءً على الأحداث الإخبارية الهامة. تداول الأخبار
  • **تحليل المشاعر:** تقييم معنويات السوق بناءً على البيانات النصية. تحليل المشاعر
  • **إدارة المخاطر:** تحديد مستويات وقف الخسارة وجني الأرباح. إدارة المخاطر
  • **التحليل الأساسي:** تقييم العوامل الاقتصادية التي تؤثر على أسعار الأصول. التحليل الأساسي
  • **تداول الاتجاه:** استراتيجية تركز على تداول مع اتجاه السوق السائد. تداول الاتجاه
  • **تداول النطاق:** استراتيجية تركز على تداول داخل نطاق سعري محدد. تداول النطاق

باستخدام استعلامات Eloquent، يمكنك استخراج البيانات اللازمة لتنفيذ هذه التحليلات واتخاذ قرارات تداول مستنيرة.

الخلاصة

استعلامات Eloquent هي أداة قوية ومرنة للتفاعل مع قواعد البيانات في Laravel. من خلال فهم المفاهيم الأساسية التي تمت مناقشتها في هذا المقال، يمكنك بناء تطبيقات ويب فعالة وقابلة للصيانة. تذكر أن الممارسة هي المفتاح لإتقان هذه التقنيات.


ابدأ التداول الآن

سجل في IQ Option (الحد الأدنى للإيداع $10) افتح حساباً في Pocket Option (الحد الأدنى للإيداع $5)

انضم إلى مجتمعنا

اشترك في قناة Telegram الخاصة بنا @strategybin للحصول على: ✓ إشارات تداول يومية ✓ تحليلات استراتيجية حصرية ✓ تنبيهات باتجاهات السوق ✓ مواد تعليمية للمبتدئين

Баннер