راکت
حل شده

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

12 پاسخ

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

ثبت پرسش جدید

پاسخ‌ها

12
ابوالفضل ویسی
ابوالفضل ویسی
@vaysi

تخصص: برنامه نویس بک اند و فرانت اند

بهترین پاسخ

سلام خسته نباشید .
فک نکنم کار سختی باشه براتون . کافیه در کنترلر مربوطه مدل های مورد نظرتون رو با شرط های مورد نظرتون صدا بزنید .
و بعد نتیجه هر مدل رو به صورت یک آرایه برگردونید و در آخر با استفاده از تابع 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);

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

یاسر مختاری
یاسر مختاری
@yasermk1818

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

محمد فولادگر
محمد فولادگر
@fouladgardev

تخصص: Back-End Web Developer

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

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

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

شاید پاسخ شما همین‌جا باشد

محمد رضا اجلالی
محمد رضا اجلالی
@mredeveloper

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

سیدعلی موسوی
سیدعلی موسوی
@juza66

تخصص: سی شارپ و پی اچ پی

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

سیدعلی موسوی
سیدعلی موسوی
@juza66

تخصص: سی شارپ و پی اچ پی

@fathi

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

محمد فولادگر
محمد فولادگر
@fouladgardev

تخصص: Back-End Web Developer

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

محمد فولادگر
محمد فولادگر
@fouladgardev

تخصص: Back-End Web Developer

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

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

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

محمد رضا اجلالی
محمد رضا اجلالی
@mredeveloper

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

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

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

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

محمد فولادگر
محمد فولادگر
@fouladgardev

تخصص: 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 های پکیج استفاده کنید.
موفق باشید

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام