LIKE ব্যবহার করে ডাটাবেসের অনুসন্ধান সম্পাদনের জন্য লারভেলে সুস্পষ্ট ORM ব্যবহার করা


93

অনুসন্ধান কোয়েরিটি তৈরি করতে আমি এলওউথের সক্রিয় রেকর্ড বিল্ডিংটি ব্যবহার করতে চাই, তবে এটি একটি পছন্দ অনুসন্ধান হতে চলেছে। আমি খুঁজে পেয়েছি User::find($term)বা পেয়েছি User::find(1), তবে এটি এর মতো বিবৃতি উত্পন্ন করছে না। আমি সরাসরি উত্তর খুঁজছি না, তবে কেউ যদি কমপক্ষে আমাকে একটি দিকনির্দেশনা দিতে পারে তবে এটি দুর্দান্ত হতে চাই!


4
লারাভেল ডডকস / ডেটাবেস / ইলভোয়রেন্ট .. আপনি ডকুমেন্টেশন ব্যবহার করতে পারেন - এটি খুব স্পষ্ট।
ytsejam

4
আমি এই পৃষ্ঠাটি দেখেছি আমি কেবল ওয়াইল্ডকার্ডগুলির সাথে অনুসন্ধানের জন্য কিছুই দেখতে পেলাম না। কয়েক হাজার সারি রয়েছে বলে আমিও পূর্বাঞ্চের লুপে একটি রেজেক্স স্থাপন করতে চাইনি
জোনাথন

$ ইমেল = ডিবি :: টেবিল ('ব্যবহারকারী') -> যেখানে ('আইডি', '=', 1) -> কেবল ('ইমেল');
ytsejam

এটিকে ডক্সে সাবলীল ক্যোয়ারী নির্মাতা বলা হয়।
ytsejam

আমি যদি উত্তরটি এবং আপনার মন্তব্যটিকে উত্তর হিসাবে চিহ্নিত করতে পারি তবে আমি চাই। আমাকে সঠিক দিকে নিয়ে যাওয়ার জন্য আপনাকে ধন্যবাদ
জোনাথন

উত্তর:


235

আপনি এই সিনট্যাক্সের সাথে LIKE ব্যবহার করে ডাটাবেস সন্ধান করতে সক্ষম হবেন:

Model::where('column', 'LIKE', '%value%')->get();

4
এতটা দক্ষ নয়, "মারাত্মক ত্রুটি: '100' এর সর্বাধিক ফাংশন নেস্টিং স্তর পৌঁছেছে, বাতিল করা হচ্ছে! ..."
সাসি বর্ণ কুমার

@gsk আমার মনে হয় আপনি (যোগদানের পদ্ধতিটি ব্যবহার করে) যোগদান করেন এবং তারপরে আপনি যথারীতি কলামটি অনুসন্ধান করতে পারেন। বাক্য গঠনটি সম্ভবত এরকম কিছু table.field
অ্যান্থনি 21

64

আপনার যদি প্রায়শই লাইক ব্যবহারের প্রয়োজন হয় তবে আপনি সমস্যাটি কিছুটা সহজ করতে পারেন l () এর মতো একটি কাস্টম পদ্ধতি তৈরি করা যেতে পারে মডেলটিতে যা স্পষ্টতই ORM উত্তরাধিকার সূত্রে প্রাপ্ত:

public  function scopeLike($query, $field, $value){
        return $query->where($field, 'LIKE', "%$value%");
}

সুতরাং আপনি এই পদ্ধতিটি এইভাবে ব্যবহার করতে পারেন:

User::like('name', 'Tomas')->get();

এটি এটির আরও 'লারাভেল' উপায়। এটি কেবল পরিষ্কার এবং আপনার চারপাশে যেতে এবং প্রতিটি সামঞ্জস্য করার পরিবর্তে আপনাকে সুযোগটি এক জায়গায় সামঞ্জস্য করতে দেয় ->where()
ড্যানিয়েল ডিহার্স্ট

সত্যিই এই উত্তর ভালবাসা। এটি মডেল এবং এর ব্যবহারকে খুব মার্জিত করে তোলে যা লারাভেল সম্পর্কে।
ডিএথেম্পারার

29

এফওয়াইআই, অপারেটরগুলির তালিকা ( লাইক এবং অন্যান্য সমস্তগুলি সমন্বিত) কোডে রয়েছে:

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

protected $operators = array(
    '=', '<', '>', '<=', '>=', '<>', '!=',
    'like', 'not like', 'between', 'ilike',
    '&', '|', '^', '<<', '>>',
    'rlike', 'regexp', 'not regexp',
);

অস্বীকৃতি:

জোল লারসনের উত্তরটি সঠিক। আমার উর্ধ্বতন পেয়েছে।

আমি আশা করছি এই উত্তরটি স্পষ্টতী ওআরএম (সঠিকভাবে লোকদের নির্দেশ করে ) এর মাধ্যমে কী উপলব্ধ তা আরও আলোকপাত করবে । যতক্ষণ ডকুমেন্টেশন একটি লিঙ্ক হবে পর্যন্ত ভাল, যে লিঙ্ক নিজেই অধরা প্রমাণিত হয়েছে।


18

একক উদ্ধৃতির পরিবর্তে ডাবল উদ্ধৃতি ব্যবহার করুন যেমন:

where('customer.name', 'LIKE', "%$findcustomer%")

নীচে আমার কোডটি দেওয়া হয়েছে:

public function searchCustomer($findcustomer)
{
    $customer = DB::table('customer')
                  ->where('customer.name', 'LIKE', "%$findcustomer%")
                  ->orWhere('customer.phone', 'LIKE', "%$findcustomer%")
                  ->get();

    return View::make("your view here");
}

3

আপনি যদি আমার মতো ডাবল উক্তি পছন্দ না করেন তবে এটি একক উদ্ধৃতি সহ আপনার জন্য কাজ করবে:

$value = Input::get('q');
$books = Book::where('name', 'LIKE', '%' . $value . '%')->limit(25)->get();

return view('pages/search/index', compact('books'));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.