HOW THE ROUTE CUSTOM KEYS WORK WITH SCOPING IN LARAVEL
Nov 27, 2023 Copy Link
السلام عليكم, اهلاً بيكوا في مقالة جديدة و هنتكلم عن ال Custom Keys & Scoping في لارفيل 😃
خليني الأول قبل ما أدخل في موضوعنا أفكرك بشوية حاجات لازم تكون عارفها في لارفيل, فاتعالوا كدا نشوف الأكواد اللي جاية دي بتقول ايه 🧐
Route::get('/users/{user}', function ($user) {
return "The user id is: {$user}";
});
لو كتبنا ال route بالشكل دا users/5/ في ال browser القيمة هتكون The user id is: 5
و دا اللي موضحاه لارفيل في جزء ال Required Parameters 💡
خلينا نصعب الموضوع شوية و نشوف الكود اللي جاي دا 🤯
use App\Models\User;
Route::get('/user/{user}', function (User $user) { return "The user name is: {$user->name}"; });
لارفيل هنا بشكل تلقائي هتدور في جدول ال users بال id اللي انت عملتله passing, بس خلي بالك عشان يطبعلك إسم المستخدم بشكل صحيح لازم ال segment name يبقا نفس ال type-hinted variable name و دا زي ماهو واضح هنا في جزء ال Implicit Binding 💡
طيب هو أنا علي طول هعمل passing لرقم ال id الخاص بال user مينفعش اعمل customize لل process دي!؟ 🤔
لارفيل هتقولك لأ و هتلاقي الكلام دا مشروح في جزء ال Customizing The Key 💡
تعالوا بقا نشوف موضوع النهارده, و هو لو أنا عندي اكتر من عملية model binding الموضوع هيمشي ازاي؟ 🤔
use App\Models\Post;
use App\Models\User;
Route::get('/users/{user}/posts/{post}', function (User $user, Post $post) {
return "The user {$user->name} has this post title {$post->title}";
});
كل اللي هيحصل هنا إن لارفيل هتعمل search في جدول ال users عن ال id اللي إنت عملتله passing و كذا الموضوع مع ال posts 👀
خلونا نعدل الكود كدا شوية و نخليه بالشكل اللي جاي دا 🛠
use App\Models\Post;
use App\Models\User;
Route::get('/users/{user}/posts/{post:slug}', function (User $user, Post $post) {
return "The user {$user->name} has this post title {$post->title}";
});
الكود اللي فات دا مختلف عن اللي قبله في إني بدل ما هعمل search في جدول ال posts بإستخدام ال id هنا هعمل search يإستخدام ال slug column و في ال scenario دا لارفيل هتفترض إن ال User model فيها ميثود إسمها posts و دي عبارة عن ال relationship اللي بتربط بين ال users و ال posts ⛓
يعني لو كتبنا ال route بالشكل دا users/5/posts/how-the-route-custom-keys-work-with-scoping-in-laravel/ لارفيل هتعمل search في جدول ال posts بال post اللي عنده slug بيساوي القيمة دي how-the-route-custom-keys-work-with-scoping-in-laravel و في نفس الوقت يكون related بالمستخدم اللي ال id الخاص بيه بيساوي 5 😎
طيب لو عايز استخدم ال scenario الأول من غير ما أعمل customizing لل key و في نفس الوقت يكون ال two models بينهم relation أعمل إيه؟ 🤔
لارفيل بتقولك إستخدام ال scopeBindings ميثود 💡
طيب علي نفس النهج اللي فات و عايز استخدام ال scenario التاني و أعمل customizing لل key و نفس الوقت ميكونش بينهم relation أعمل إيه؟ 🤔
لارفيل بتقولك إستخدام ال withoutScopeBindings ميثود 💡
و بكدا أكون خلصت و أتمني تكون إستفدت ✔
لو في حاجة من اللي قولتها مش واضحة أو صعبة تقدر تسئلني من خلال الفورم دي To Be Spread Form 😃