লারাভেল -৫ 'লাইক' সমতুল্য (স্বতন্ত্র)


142

লারাভেল 5 এর সাথে ডাটাবেস থেকে কিছু ফলাফল টানতে আমি নীচের কোডটি ব্যবহার করছি।

BookingDates::where('email', Input::get('email'))->orWhere('name', 'like', Input::get('name'))->get()

যাইহোক, orWhereLike কোনও ফলাফলের সাথে মেলে না বলে মনে হচ্ছে। এই কোডটি মাইএসকিউএল স্টেটমেন্টের ক্ষেত্রে কী উত্পন্ন করে?

আমি নিম্নলিখিত মত কিছু অর্জন করার চেষ্টা করছি:

select * from booking_dates where email='my@email.com' or name like '%John%'

উত্তর:


379

আপনি যদি দেখতে চান যে ডাটাবেসে কী চালানো হয় dd(DB::getQueryLog())তা দেখতে কী জিজ্ঞাসা চালানো হয়েছিল তা ব্যবহার করুন ।

এটা চেষ্টা কর

BookingDates::where('email', Input::get('email'))
    ->orWhere('name', 'like', '%' . Input::get('name') . '%')->get();

35
এই কোয়েরি স্কিল ইনজেকশন সুরক্ষিত?
পার্থো

23
@ পার্থো হ্যাঁ লারাভেল পুরো স্ট্রিংটি স্ক্রিন করে যা আপনি whereপদ্ধতির তৃতীয় আর্গুমেন্ট হিসাবে পাস করেন ।
ফিনেসে

8
ইনজেকশন সুরক্ষিত থাকাকালীন আপনি ব্যবহারকারী ইনপুটটিতে অপ্রত্যাশিত% পরীক্ষা করতে চাইতে পারেন। উদাহরণস্বরূপ, "% জন%" এবং "জন%" পছন্দ করুন আলাদাভাবে সঞ্চালিত হন (আপনি কেবল পরবর্তীকালের উদ্দেশ্য করতে পারেন)। এছাড়াও খালি ইনপুট এবং তারপরে একা "%" বিবেচনা করুন, যা উপরের কোড থেকে অনিচ্ছাকৃত ফলাফলের দিকেও নিয়ে যেতে পারে।
ইয়ান ফ্লিটন

4
ইয়ান এর সাথে একমত লারাভেল কেবল আংশিক পলায়ন করে। আপনি যদি লাইককে সঠিকভাবে এড়াতে না পারেন তবে অনেক দুষ্কর্ম সম্ভব। এখানে কীভাবে রয়েছে: stackoverflow.com/a/42028380/329062
গ্রেগ

9
$data = DB::table('borrowers')
        ->join('loans', 'borrowers.id', '=', 'loans.borrower_id')
        ->select('borrowers.*', 'loans.*')   
        ->where('loan_officers', 'like', '%' . $officerId . '%')
        ->where('loans.maturity_date', '<', date("Y-m-d"))
        ->get();

-> যেখানে ( 'মত' 'loan_officers', '%' $ officerId '%'।।) যেখানে loan_officers ধারাবাহিকভাবে ক্ষেত্র
সাদিক রশিদ

7

আমার এটির জন্য সুযোগ রয়েছে, আশা করি এটি কারও সাহায্য করবে help

public function scopeWhereLike($query, $column, $value)
{
    return $query->where($column, 'like', '%'.$value.'%');
}

public function scopeOrWhereLike($query, $column, $value)
{
    return $query->orWhere($column, 'like', '%'.$value.'%');
}

ব্যবহার:

$result = BookingDates::whereLike('email', $email)->orWhereLike('name', $name)->get();

5

আমি মনে করি ক্যোয়ারীতে প্যারামিটারগুলি দেওয়ার ভাল অনুশীলনগুলি অনুসরণ করে এটি আরও ভাল:

BookingDates::whereRaw('email = ? or name like ?', [$request->email,"%{$request->name}%"])->get();

আপনি ডকুমেন্টেশনে এটি দেখতে পারেন, লারাভেল 5.5।

আপনি লারাভেল স্কাউট ব্যবহার করতে পারেন এবং এটি অনুসন্ধানের মাধ্যমে আরও সহজ করে তুলতে পারেন। এখানে ডকুমেন্টেশন দেওয়া আছে।

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