آفلاین
user-avatar

ساخت جستجو در چند جدول

2 سال پیش
توسط محمد فولادگر آپدیت شد
آفلاین
user-avatar
یاسر مختاری ( 300 تجربه )
2 سال پیش

سلام به همگی دوستان .
من میخوام با استفاده از سرچ باکس یه جستجو ایجاد کنم که همزمان داخل چند جدول رو بگرده و نتیجه رو نشون بده !
ممنون میشم راهنمایی کنید!
کارای ایجکسیش رو انجام دادم فقط سمت کویری سمت سرورش مونده.

آفلاین
user-avatar
ابوالفضل ویسی ( 750 تجربه )
2 سال پیش
تخصص : برنامه نویس بک اند و فرانت اند

سلام خسته نباشید .
فک نکنم کار سختی باشه براتون . کافیه در کنترلر مربوطه مدل های مورد نظرتون رو با شرط های مورد نظرتون صدا بزنید .
و بعد نتیجه هر مدل رو به صورت یک آرایه برگردونید و در آخر با استفاده از تابع array_merge نتایج رو ادغام کنید و به ویو مورد نظر ارسال کنید .
اگر هم مدل هاتون فیلد های مشترکی ندارن میتونید یک ارایه خالی دیگر بسازید با یک سری فیلد های واحد و با استفاده از تابع یا یک حلقه مقادیر هر مدل را در آرایه مورد نظر بریزید و در آخر آرایه رو برگشت بدید .
نمونه :‌

$first = Model1::whereName($key)->get()->toArray();
$second = Model2::whereTitle($key)->get()->toArray();
$third = Model3::whereBody($key)->get()->toArray();
$res = array_merge($first,$second,$third);

امیدوارم تونسته باشم راهنماییتون کنم .

آفلاین
user-avatar
یاسر مختاری ( 300 تجربه )
2 سال پیش

سلام مرسی از راهنماییینون اقا ابوالفضل ،خیلی ساده و کاربردی بود!!واقعا تشکر

آفلاین
user-avatar
محمد فولادگر ( 1034 تجربه )
2 سال پیش
تخصص : Back-End Web Developer

با سلام
@yasermk1818
@vaysi
شما حتی میتونید شرطهای هر مدل را به عنوان یک فیلتر در نظر بگیرید.
این باعث میشه در کنترلر بجای چک کردن شرط های زیاد از فیلترهای هر مدل بر اساس پارامترها استفاده کنید.

به این پکیج یه نگاهی کنید.کارتونا حل میکنه:

https://github.com/mohammad-fouladgar/eloquent-builder

آفلاین
user-avatar
محمد رضا اجلالی ( 7150 تجربه )
2 سال پیش

@fouladgar_dev
سلام وقتتون بخیر.بنده الان در حال خاندن مقاله انگلیسی شما بودم. و واقعا لذت بردم.
بنده پکیج رو نصب کردم و کلاس filter رو هم در App/EloquentFilters/User/NameFilter
اما زمانی که به صورت get -> name=mohamad رو براش میفرستم مینویسه Filter not found.
ممنون میشم راهنمایی کنید.

آفلاین
user-avatar
سیدعلی موسوی ( 107403 تجربه )
2 سال پیش
تخصص : سی شارپ و پی اچ پی

آفرین چه پیکج های خوبی نوشتی @fouladgar_dev

( تجربه )
2 سال پیش

User::has('posts')->get();
//////
$users = User::whereHas('posts', function($q){
$q->where('created_at', '>=', 'q');
})->get();
///////
User::to('posts')->get();
///////
toArray()کارش چیه؟
کار has,wherehas,with,to چیه؟

آفلاین
user-avatar
سیدعلی موسوی ( 107403 تجربه )
2 سال پیش
تخصص : سی شارپ و پی اچ پی

@fathi

این یک فساد هست (شما بخون فاکشن) که مقادیری بهش ارسال میکنید یک کوئری (ممکنه پیش فرض قرار داده باشه تویی کدهاش و بعد از دریافت ریکوئست ها براساس اونا برات یک کوئری میسازه) برات میسازه و بصورت ارایه برمیگردونه.

( تجربه )
2 سال پیش

متوجه نمیشم میشه یکی یکی بگید

آفلاین
user-avatar
محمد فولادگر ( 1034 تجربه )
2 سال پیش
تخصص : Back-End Web Developer

@juza666
ممنون از توجه شما.
امیدوارم برای شما مفید باشه و مورد استفاده قرار بگیره

آفلاین
user-avatar
محمد فولادگر ( 1034 تجربه )
2 سال پیش
تخصص : Back-End Web Developer

@mre_developer
خیلی خوشحالم از اینکه وقت گذاشتید و مقاله را مطالعه کردید و ممنون از انرژی مثبتی که دادید.

مقاله فارسی هم در سایت ویرگول گذاشتم که میتونید مشاهده کنید.
https://virgool.io/Software/نوشتن-فیلترهای-جستجوی-پیشرفته-در-لاراول-bcnyjvxu3ygj

درمورد مشکلی هم که مطرح کردید درست متوجه نشدم که چطوری دارید استفاده میکنید.اگر امکانش هست در قسمت issues های پکیج نمونه کد خودتون را مطرح کنید تا سریعتر شما را کمک کنم
https://github.com/mohammad-fouladgar/eloquent-builder/issues
با تشکر فراروان از شما

آفلاین
user-avatar
محمد رضا اجلالی ( 7150 تجربه )
2 سال پیش

@fouladgar_dev
بنده این قسمت رو متوجه نمیشم.

""شما فقط کافیست مدل و لیست پارامترها را به متد to ارسال کنید.

و بعد از آن به ازای پارامترهای درخواستی که قرار است به Query اضافه شوند فیلتر تعریف کنیم.""

اولا این پارامتر ها چی میتونن باشن؟ مثلا من میخوام با پارامتر name سرچ کنم.
فیلترش رو چطوری درست کنم؟
ببخشید وقتم خیلی تنگه تا فردا باید تحویل بدم

آفلاین
user-avatar
محمد فولادگر ( 1034 تجربه )
2 سال پیش
تخصص : Back-End Web Developer

@mre_developer
فرض کنید شما یه ادرس به شکل زیر دارید:
‍‍‍
Get: users/filter?age_more_than=25&gender=male

پارامترها در اینجا age_more_than و gender هستند. مدل هم موجودیت مورد نظر برای جستجو می باشد مانند User
به این مثال توجه کنید:

<?php
    class UserController extends Controller
    {
        public function index(Request $request)
        {
            $users = \EloquentBuilder::to(\App\User::class, $request->all());

            return $users->get();
        }
    }

پس شما باید ۲تا فیلتر به اسم AgeMoreThanFilter و GenderFilter مانند نمونه گفته شده در داکیومنت پکیج ایجاد کنید و Query مورد نظر خود را در فیلترهای تعریف شده بنویسید.
برای اینکه سریعتر پاسخگو باشم لطفا از قسمت issues های پکیج استفاده کنید.
موفق باشید

برای ارسال پاسخ باید وارد سایت شوید