دریافت اطلاعات از دیتابیس

4 روز پیش توسط amir آپدیت شد
آفلاین
user-avatar
amir ( 8553 تجربه )
4 روز پیش
تخصص : بک اند و فرانت اند

لینک کوتاه اشتراک گذاری

0

باسلام دوستان در کار با دیتابیس یک دستور با نام find()داریم که ای دی رو بهش میدیم و چون یونیک است اونرو پیدا میکنه و بر میگردونه من میخاستم این دستور برای یک مقدار یونیکه دیگه مثله slug هم کار بکنه چجوری میتونم ؟

بهترین پاسخ
آفلاین
user-avatar
مهران مرندی
4 روز پیش

خب پس بياييد يكم عميق تر بشيم.
در نهايت كاري كه متد find در پشت صحنه براي شما انجام ميده استفاده از همون متد first هست
متد find در مسير

vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php

قرار داره و به اين شكله

    public function find($id, $columns = ['*'])
    {
        if (is_array($id) || $id instanceof Arrayable) {
            return $this->findMany($id, $columns);
        }

        return $this->whereKey($id)->first($columns);
    }

خب همونطور كه در خط 7 ميبينيد اگر شما يك id به تابع find بفرستيد با متد first اون رو پيدا ميكنه
اگر هم چند id ارسال كنيد در تابع findMany اونها رو با تابع get برميگردونه.

آفلاین
user-avatar
مهران مرندی ( 39951 تجربه )
4 روز پیش
تخصص : برنامه نویس PHP - laravel

لینک کوتاه اشتراک گذاری

1

find روي primary key كار ميكنه
شما يا بايد slug رو به primary key تبديل كنيد، يا اينكه هسته لاراول رو دستكاري كنيد كه find جور ديگه اي كار كنه (كه اصلا اين كار رو نكنيد، فقط چون ميشد گفتم D:)

راه ساده تر هم اينه

$Posts= Post::where('slug', $slug)->first();

و همچينين در ورژن 6 به بالا

$Posts= Post::firstWhere('slug', $slug);
آفلاین
user-avatar
گمنام ( 47946 تجربه )
4 روز پیش
تخصص : طراح وب ، برنامه نویس

لینک کوتاه اشتراک گذاری

-3

درود
به نظرم اگه مقدار رو از url دریافت می کنید به جای اینکار ها بهتره از Route Model Binding استفاده کنید

آفلاین
user-avatar
amir ( 8553 تجربه )
4 روز پیش
تخصص : بک اند و فرانت اند

لینک کوتاه اشتراک گذاری

0

@mehranmarandi90 تشکر از پاسختون ولی باز هم ما در این کوئری اولین نتیجه رو در نظر میگیریم درصورتی که کلا یه نتیجه قراره داشته باشیم بازهم بنظرم یکم نامناسبه ولی قطعا پاسخ سما درست هستش و میشه اینجوری هم پیاده سازیش کرد ولی اگه یه جیزی شبیه find() که فقط همون نتیجه رو برمیگردونه باشه بهتر هستش دوستانی که این رو‌پیاده سازی کردن یا همین سایت راکت از چه روشی استفاده کردین؟

آفلاین
user-avatar
مهران مرندی ( 39951 تجربه )
4 روز پیش
تخصص : برنامه نویس PHP - laravel

لینک کوتاه اشتراک گذاری

1

خب پس بياييد يكم عميق تر بشيم.
در نهايت كاري كه متد find در پشت صحنه براي شما انجام ميده استفاده از همون متد first هست
متد find در مسير

vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php

قرار داره و به اين شكله

    public function find($id, $columns = ['*'])
    {
        if (is_array($id) || $id instanceof Arrayable) {
            return $this->findMany($id, $columns);
        }

        return $this->whereKey($id)->first($columns);
    }

خب همونطور كه در خط 7 ميبينيد اگر شما يك id به تابع find بفرستيد با متد first اون رو پيدا ميكنه
اگر هم چند id ارسال كنيد در تابع findMany اونها رو با تابع get برميگردونه.

آفلاین
user-avatar
amir ( 8553 تجربه )
4 روز پیش
تخصص : بک اند و فرانت اند

لینک کوتاه اشتراک گذاری

1

مهران جان عالی @mehranmarandi90

برای ارسال پاسخ لازم است، ابتدا وارد سایت شوید.