amir
3 سال پیش توسط amir مطرح شد
5 پاسخ

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

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


ثبت پرسش جدید
مهران مرندی
تخصص : برنامه نویس
@mehranmarandi 3 سال پیش آپدیت شد
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 برميگردونه.


مهران مرندی
تخصص : برنامه نویس
@mehranmarandi 3 سال پیش مطرح شد
1

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

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

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

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

$Posts= Post::firstWhere('slug', $slug);

علیرضا کفایتی
تخصص : برنامه نویس laravel, vue.js
@alirezakefayati 3 سال پیش مطرح شد
-3

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


amir
تخصص : بک اند و فرانت اند
@behzadi 3 سال پیش مطرح شد
0

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


مهران مرندی
تخصص : برنامه نویس
@mehranmarandi 3 سال پیش آپدیت شد
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 برميگردونه.


amir
تخصص : بک اند و فرانت اند
@behzadi 3 سال پیش مطرح شد
1

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


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

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