Find (), FindOrFail (), first (), firstOrFail (), get (), list (), toArray () এর মধ্যে পার্থক্য কী?


109

এই পদ্ধতির মধ্যে পার্থক্য কী:

  1. find()
  2. findOrFail()
  3. first()
  4. firstOrFail()
  5. get()
  6. list()
  7. toArray()

আমি সেগুলি ব্যবহার করছি এবং প্রত্যেকে একটি আলাদা ফলাফল দেয় এবং কখনও কখনও আমাকে toArray()শেষে যুক্ত করতে হয় get()কারণ আমার ফাংশনটি অ্যারের আশা করে। অন্যান্য পদ্ধতিগুলিও অ্যারে তৈরি করে না?



@ জোসেফ সিলবারের সমস্ত তথ্য সঠিক এবং খুব দরকারী। আমি লারাভেল 5.2 থেকে তালিকার একটি উত্তর যুক্ত করতে চাই 5 সংগ্রহের তালিকার পদ্ধতি, ক্যোয়ারী বিল্ডার এবং সুস্পষ্ট কোয়েরি বিল্ডার অবজেক্টগুলিকে নতুন করে নামকরণ করা হয়েছে। পদ্ধতির স্বাক্ষর একই থাকে।
নীরভ ভোই

উত্তর:


227
  1. find($id)একটি আইডি নেয় এবং একটি একক মডেল দেয়। কোনও মিলে যাওয়া মডেল উপস্থিত না থাকলে এটি ফিরে আসে null

  2. findOrFail($id)একটি আইডি নেয় এবং একটি একক মডেল দেয়। যদি কোনও মিলে যাওয়া মডেল উপস্থিত না থাকে তবে এটি একটি ত্রুটি 1 ছুড়ে দেয় ।

  3. first()ডাটাবেসে পাওয়া প্রথম রেকর্ড ফিরিয়ে দেয়। কোনও মিলে যাওয়া মডেল উপস্থিত না থাকলে এটি ফিরে আসে null

  4. firstOrFail()ডাটাবেসে পাওয়া প্রথম রেকর্ড ফিরিয়ে দেয়। যদি কোনও মিলে যাওয়া মডেল উপস্থিত না থাকে তবে এটি ত্রুটি 1 নিক্ষেপ করে ।

  5. get() ক্যোয়ারীর সাথে মিল রেখে মডেলগুলির একটি সংগ্রহ প্রদান করে।

  6. pluck($column)প্রদত্ত কলামে কেবলমাত্র মানগুলির সংগ্রহ প্রদান করে। লারাভেলের পূর্ববর্তী সংস্করণগুলিতে এই পদ্ধতিটি বলা হয়েছিল lists

  7. toArray() মডেল / সংগ্রহকে একটি সাধারণ পিএইচপি অ্যারে রূপান্তর করে।


দ্রষ্টব্য: একটি সংগ্রহ বিফিড আপ অ্যারে is এটি একটি অ্যারের মতো একইভাবে কাজ করে তবে এতে অনেকগুলি কার্যকারিতা রয়েছে যা আপনি ডক্সে দেখতে পাচ্ছেন ।

দুর্ভাগ্যক্রমে, পিএইচপি আপনাকে কোনও অ্যারে ব্যবহার করতে পারে সেখানে কোনও সংগ্রহ সামগ্রী ব্যবহার করতে দেয় না। উদাহরণস্বরূপ, একটি foreachলুপে একটি সংগ্রহ ব্যবহার করা ঠিক আছে, এটি পাস করার মতো array_mapনয়। একইভাবে, আপনি যদি কোনও আর্গুমেন্ট হিসাবে টাইপ-হিন্ট করেন তবে arrayপিএইচপি আপনাকে এটি সংগ্রহের অনুমতি দেয় না। পিএইচপি 7.1 থেকে শুরু করে, iterableটাইফিন্ট রয়েছে , যা অ্যারে এবং সংগ্রহ উভয়ই গ্রহণ করতে ব্যবহৃত হতে পারে।

আপনি যদি কখনও কোনও সংগ্রহ থেকে সরল অ্যারে পেতে চান তবে এর all()পদ্ধতিটি কল করুন ।


1 পদ্ধতি findOrFailএবং firstOrFailপদ্ধতি দ্বারা নিক্ষেপ করা ত্রুটি হ'ল ক ModelNotFoundException। আপনি যদি এই ব্যতিক্রমটি নিজে না ধরেন তবে লারাভেল 404 এর সাথে সাড়া দেবে যা আপনি বেশিরভাগ সময় চান।


4
সাফ করার জন্য আপনাকে ধন্যবাদ। এখানে জিনিসটি রয়েছে, আমি এই জাতীয় পোস্টগুলির একটি তালিকা পাওয়ার চেষ্টা করছি $post = Post::with('user.votes')->with('subreddit.moderators')->findOrFail($post->id);যাতে আমি অ্যাক্সেস করতে পারি $post->subreddit->moderators->user_idতবে তা দিচ্ছে Undefined property: Illuminate\Database\Eloquent\Collection::$user_id- আমি অ্যাক্সেস করতে পারি $post->subreddit->moderatorsতবে আমি যুক্ত করার পরে না user_id- কেন হয়?
হালেনেক্স

subredditmoderatorsসম্পত্তি সহ একটি একক মডেল । moderatorsএটি একটি সংগ্রহ, কোনও একক মডেল নয়। আপনি এটার বাইরে সরাসরি কিছু অ্যাক্সেস করতে পারবেন না। আপনি চাইলে আপনি প্রথমটি যাচাই করতে পারেন:$post->subreddit->moderators[0]->user_id
জোসেফ সিলবার

আমি মনে করি আপনার "এটি একটি ত্রুটি নিক্ষেপ" প্রতিস্থাপন করা উচিত "এটি একটি মডেলনটফাউন্ডএক্সেপশন ব্যতিক্রম ছোঁড়ে": ডি যাইহোক দুর্দান্ত অবদান;)
ববিউউউম্যান

@ জোসেফসিলবার পারফেক্ট!
bobibouwmann
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.