اذهب إلى المحتوى

السؤال

نشر

عندما أستخدم eloquent ، يمكنني استخدام طريقة "where" ثم طريقة "get" لملء كائن يحتوي على ما حددته في قاعدة البيانات الخاصة بي. يعني:

$users = User::where('gender', 'M')->where('is_active', 1)->get(['pseudo', 'email', 'age', 'created_at'])->toArray();

هنا يمكنني اختيار الأعمدة التي أريد الحصول عليها مثل "pseudo" ، "email" ، إلخ. ولكن ما أريده هو طريقة القيام بالعكس. يمكن أن يكون شيئًا من هذا القبيل:

$users = User::where('gender', 'M')->where('is_active', 1)->notGet(['pseudo', 'email', 'age', 'created_at'])->toArray();

هل هناك طريقة معينة لعمل ذلك؟

Recommended Posts

  • 0
نشر

أحد الطرق المُمكنة لتحقيق ذلك هي إستخدام نطاق خاص في النموذج User بالشكل التالي:

protected $fields = ['id','pseudo','email']; // add all fields from your table

public function scopeExclude($query, $excludes = []) 
{
    return $query->select(array_diff($this->fields, (array) $excludes));
}

ثم في المُتحكم يُمكنك عمل:

<?php

$users = User::where([
  ['gender', '=', 'M'],
  ['is_active', '=', 1],
])->exclude(['pseudo', 'email', 'created_at'])
  ->toArray();
  • 0
نشر (معدل)

يمكنك استخدام makeHidden للقيام بإخفاء الأعمدة التي لا تريدها,

فنقوم بالاستعلام عن البيانات التي نريدها, ثم نُطبق الدالة makeHidden ونحدد الأعمدة التي لا نريدها في النتيجة

$res = Model::where('users')->get();
$res->makeHidden(['pseudo', 'email', 'age', 'created_at']);
return $res;

فبهذه الطريقة تقوم بإخفاء قيم (البريد الإلكتروني والعمر ... إلخ) عند الحاجة

هذه طريقة جيدة, ولكن توجد طريقة أخرى أيضًا تُسهل عليك الإجراءات إذا كنت ترغب بإخفاء الأعمدة بشكل دائم

وهي التوجّه إلى الـ model الخاص بالمستخدمين 'User' (أو أي نموذج ترغب بإخفاء أعمدة بداخله)

ويوجد هنالك المتغير

protected $hidden = [...]

حيث يحتوي على مصفوفة باسماء الحقول التي لن تظهر عند الاستعلام

ونقوم بإضافة الحقول المراد إخفائها في المتغير, لتصبح كالآتي:

protected $hidden = [
	'password', 'remember_token', 'pseudo', 'email', 'age', 'created_at',
];

ثم نقوم بالاستعلام عن البيانات بشكل مباشر عن طريق نموذج User

$res = User::all();
return $res; // الحقول التي حددناها أنّها مخفية لن تظهر في النتيجة

 

تم التعديل في بواسطة Alfakiat
  • 0
نشر

توفر Laravel هذه الخاصية فيمكنك استخدام المتغير hidden بداخل ملف Model الخاص بالمتحكم لإخفاء الحقول الذي تريد إستبعادها مثل 

protected $hidden = array('id');

أو بهذا الشكل 

protected $hidden = ['id'];

أو يمكنك وضع أكثر من عمود بداخل المصفوفة هكذا 

protected $hidden = array('id', 'username', 'image');

أو بهذا الشكل 

protected $hidden = ['id', 'username', 'image'];

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...