باسلام دوستان در کار با دیتابیس یک دستور با نام find()داریم که ای دی رو بهش میدیم و چون یونیک است اونرو پیدا میکنه و بر میگردونه من میخاستم این دستور برای یک مقدار یونیکه دیگه مثله slug هم کار بکنه چجوری میتونم ؟
خب پس بياييد يكم عميق تر بشيم.
در نهايت كاري كه متد 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 برميگردونه.
find روي primary key كار ميكنه
شما يا بايد slug رو به primary key تبديل كنيد، يا اينكه هسته لاراول رو دستكاري كنيد كه find جور ديگه اي كار كنه (كه اصلا اين كار رو نكنيد، فقط چون ميشد گفتم D:)
راه ساده تر هم اينه
$Posts= Post::where('slug', $slug)->first();
و همچينين در ورژن 6 به بالا
$Posts= Post::firstWhere('slug', $slug);
درود
به نظرم اگه مقدار رو از url دریافت می کنید به جای اینکار ها بهتره از Route Model Binding استفاده کنید
@mehranmarandi90 تشکر از پاسختون ولی باز هم ما در این کوئری اولین نتیجه رو در نظر میگیریم درصورتی که کلا یه نتیجه قراره داشته باشیم بازهم بنظرم یکم نامناسبه ولی قطعا پاسخ سما درست هستش و میشه اینجوری هم پیاده سازیش کرد ولی اگه یه جیزی شبیه find() که فقط همون نتیجه رو برمیگردونه باشه بهتر هستش دوستانی که این روپیاده سازی کردن یا همین سایت راکت از چه روشی استفاده کردین؟
خب پس بياييد يكم عميق تر بشيم.
در نهايت كاري كه متد 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 برميگردونه.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟