Amir Alsaeed نشر 18 مارس 2021 أرسل تقرير نشر 18 مارس 2021 لدي جدولين في قاعدة البيانات المستخدم user و المنشور post، وكل مستخدم لديه مجموعة من posts. وقمت بتعريف العلاقة ضمن مودل المستخدم كالتالي: public function post(){ return $this->hasmany('post'); } وضمن post: public function user(){ return $this->belongsTo('user'); } والآن أرغب بدمج الجدولين السابقين وفقاً لعمود معيّن، فحاولت كتابة التابع التالي ضمن post لأحصل على بيانات المستخدم أيضاً: public function getAllPosts() { return Post::with('user')->get(); } ولكن نتيجة الاستعلام تكون بهذا الشكل: select * from `posts` select * from `users` where `users`.`id` in (<1>, <2>) ولكن لا أريد الحصول على كافة بيانات المستخدم، وإنما فقط بعض الحقول، مثال: select * from `posts` select id,username from `users` where `users`.`id` in (<1>, <2>) فكيف يمكنني استثناء باقي حقول الجدول والحصول فقط على أعمدة محددة من الاستعلام؟ اقتباس
0 Sam Ahw نشر 18 مارس 2021 أرسل تقرير نشر 18 مارس 2021 يمكنك إضافة تابع closure ضمن الاستعلام بالشكل التالي: Post::query() ->with(array('user' => function($query) { $query->select('id','username'); })) ->get(); بحيث يتم استعادة القيم المررة ضمن select بدلاً من كامل الجدول. ووفقاً للتوثيق الرسمي يجب دوماً إضافة الحقل id وأي مفتاح ثانوي آخر موجود ضمن الجدول في هذا الإجراء لضمان الحصول على البيانات المطلوبة. وبدءً من نسخة laravel 5.5 أصبح يمكننا استخدام التالي للحصول على النتيجة نفسها: Post::with('user:id,username')->get(); أو public function user() { return $this->belongsTo('User')->select(array('id', 'username')); } وبشكل مختصر في النسخ الحديثة يمكنك استخدام التوابع السهمية: PHP 7 Post::with(['user' => fn ($query) => $query->select('id','username')])->get(); 1 اقتباس
السؤال
Amir Alsaeed
لدي جدولين في قاعدة البيانات المستخدم user و المنشور post، وكل مستخدم لديه مجموعة من posts. وقمت بتعريف العلاقة ضمن مودل المستخدم كالتالي:
public function post(){ return $this->hasmany('post'); }
وضمن post:
public function user(){ return $this->belongsTo('user'); }
والآن أرغب بدمج الجدولين السابقين وفقاً لعمود معيّن، فحاولت كتابة التابع التالي ضمن post لأحصل على بيانات المستخدم أيضاً:
public function getAllPosts() { return Post::with('user')->get(); }
ولكن نتيجة الاستعلام تكون بهذا الشكل:
select * from `posts` select * from `users` where `users`.`id` in (<1>, <2>)
ولكن لا أريد الحصول على كافة بيانات المستخدم، وإنما فقط بعض الحقول، مثال:
select * from `posts` select id,username from `users` where `users`.`id` in (<1>, <2>)
فكيف يمكنني استثناء باقي حقول الجدول والحصول فقط على أعمدة محددة من الاستعلام؟
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.