Emad Saif نشر 3 أغسطس 2022 أرسل تقرير نشر 3 أغسطس 2022 أريد عمل الإستعلام التالي في لارافيل Laravel: $products = UserProducts::with('products')->where('user_id', '=', $user->id) ->where('count', '>', 0) ->get(); ولكن حاولت ترتيب النتائج بإستخدام بإستخدام العمود type الموجود في الجدول products لذلك قمت بإضافة التابع orderBy كما في الكود التالي: $products = UserProducts::with('products')->where('user_id', '=', $user->id) ->where('count', '>', 0) ->orderBy('products.type') ->get(); ولكن يظهر هذا الكود الخطأ التالي: Unknown column 'item.type' in 'order clause' ما حل هذه المشكلة؟ كيف أقوم بترتيب النتائج بإستخدام عمود معين في جدول مختلف في لارافيل Laravel؟ 1 اقتباس
1 محمد عاطف17 نشر 3 أغسطس 2022 أرسل تقرير نشر 3 أغسطس 2022 (معدل) لمعرفة أين يقع الخطأ فى جزء ال orderBy علينا معرفة كيف يقوم laravel بتحويل هذا الكود الى امر sql. إن laravel يقوم بتنفيذ امرين , للحصول اولا على UserProducts ثم بعد ذلك يقوم بتنفيذ امر اخر للحصول على ال products . لنرى كيف يقوم بتنفيذ ذلك SELECT * FROM `user_products` WHERE `user_id` = 1; SELECT * FROM `products` WHERE `products`.`id` in (1) هنا اولا يقوم بتنفيذ السطر الاول للحصول على userProducts ثم بعد ذلك يأخذ ال id الخاص بال product ثم يقوم بتمريرها للسطر الثانى . ولذلك فإن orderBy ستكون خطأ لانه سيقوم بترتيب السطر الاول عن طريق products.type اللتى لا توجد فى هذه العملية . ولحل تلك المشكلة هناك اكثر من حل وقد اخترت لك اسهل طريقتين . إن كنت تريد ان تقوم بترتيب النتيجة دائما ب product.type فالحل الافضل ان تقوم بالترتيب فى ملف ال model public function products() { return $this->hasMany(Product::class)->orderBy('type'); } وبذلك ستتاكد ان فى حالة استدعاء ال products ستكون مرتبة ب ال type . والطريقة الثانية عن طريق الدمج join UserProducts::join('products',function($join) { $join->on('products.id', '=', 'user_product.product_id') ->where('user_product.user_id', '=', $user->id) ->where('user_product.count', '>', 0); })->orderBy('products.type')->get(); والافضل هنا ان تقوم باستخدام select لتحديد الاعمده التى تريدها حتى لا يحدث خطأ إن كان هناك اعمده لها نفس الاسم فى الجدولين تم التعديل في 3 أغسطس 2022 بواسطة محمد عاطف11 1 اقتباس
1 Adnane Kadri نشر 4 أغسطس 2022 أرسل تقرير نشر 4 أغسطس 2022 يمكنك معاملة الناتج كتجميعة واستعمال التابع sortBy لذات الغرض، يجب حقن Closure إلى التابع sortBy كـ: $products = UserProducts::with('products')->get() ->sortBy(function($userProduct) { return $userProduct->products->type; } ) اقتباس
السؤال
Emad Saif
أريد عمل الإستعلام التالي في لارافيل Laravel:
ولكن حاولت ترتيب النتائج بإستخدام بإستخدام العمود type الموجود في الجدول products لذلك قمت بإضافة التابع orderBy كما في الكود التالي:
ولكن يظهر هذا الكود الخطأ التالي:
Unknown column 'item.type' in 'order clause'
ما حل هذه المشكلة؟ كيف أقوم بترتيب النتائج بإستخدام عمود معين في جدول مختلف في لارافيل Laravel؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.