ফিল্টারিং ফলাফলগুলি লাইক ব্যবহার করে


16

এই তিনটি "খড়খড়ি" স্ট্রিং বিবেচনা করুন:

ক) foo bar

খ) welcome to foo bar industries

গ) foo barer

এবং এখন আমার "সুই":

foo bar

(হেহ)

আমি চাইব আমার ফিল্টারটি আমার সূঁচকে খড়ের ছিটে একটি & বি স্ট্রিংয়ের সাথে মিলিয়েছে তবে সি নয়। আমি চেষ্টা করেছি:

$collection->addAttributeToFilter('name', array('like' => '%'.$needle.'%'));

তবে উপরের সাথে সি।

আমি চেষ্টাও করেছি:

$collection->addAttributeToFilter('name', array('like' => '% '.$needle.' %')); // Note the spaces

উপরের শুধুমাত্র খ সঙ্গে মেলে।

কোন সাহায্যের অনেক প্রশংসা করা হয়।

উত্তর:


37

এটি ব্যবহার করে দেখুন এবং এটি ফিট করে কিনা দেখুন:

$collection->addAttributeToFilter('name', array(
    array('like' => '% '.$needle.' %'), //spaces on each side
    array('like' => '% '.$needle), //space before and ends with $needle
    array('like' => $needle.' %') // starts with needle and space after
));

অ্যারের অ্যারে হিসাবে দ্বিতীয় প্যারামিটারটি পাস করা শর্তগুলি ব্যবহার করে বোঝা যাবে OR


যে কাজ করে :) অ্যারে কৌশল সম্পর্কে জানতাম না, ধন্যবাদ।
বেঙ্গলেক্সেক্স

কাস্টম / নন-ইভ মডেলের addAttributeToFilterসাথে প্রতিস্থাপন করা উচিত addFieldToFilter
jvalanen

কোন অ্যারে ফলাফল ফিরিয়ে দিয়েছে তা নির্ধারণ করার কোনও উপায় আছে? আমি একটি কাস্টম মডেল সংগ্রহ (নাম, বিবরণ, বিকল্প_নাম ক্ষেত্র) অনুসন্ধান করতে এই পদ্ধতিটি ব্যবহার করছি এবং বর্ণনার কারণে ফলাফলটি আঘাত হানে কিনা তা জানতে চাই (অনুসন্ধানের ফলাফলগুলিতে অতিরিক্ত ইউআই উপাদান অন্তর্ভুক্ত করতে)।
পিএসপাহ্ন

3
@pspahn সরাসরি এগিয়ে নেই। নির্বাচনটি কার্যকর হওয়ার পরে আপনি ফলাফলগুলি লুপ করতে পারেন এবং আপনার পছন্দসই ক্ষেত্রগুলির মধ্যে সূচটি পাওয়া গেছে কিনা তা পরীক্ষা করতে পারেন।
মারিয়াস

9

এর REGEXPপরিবর্তে একটি সম্ভাব্য সমাধান হ'ল LIKE:

$collection->addAttributeToFilter('name', array('regexp' => '[[:<:]]'.$needle.'[[:>:]]'));

থেকে মাইএসকিউএল ডকুমেন্টেশন :

[[: <:]], [[:>:]]

এই চিহ্নিতকারীগুলি শব্দ সীমার পক্ষে দাঁড়ায়। এগুলি শব্দের শুরু এবং শেষের সাথে যথাক্রমে মিল রয়েছে। একটি শব্দ শব্দের অক্ষরের একটি ক্রম যা শব্দের অক্ষরগুলির আগে বা তার পরে হয় না। একটি শব্দের চরিত্র হল আলমনাম বর্গ বা একটি আন্ডারস্কোর (_) এর একটি বর্ণমালা অক্ষর।

নোট করুন যে যদি $needleপসিক্স নিয়মিত এক্সপ্রেশনগুলির মধ্যে বিশেষ অর্থ রয়েছে এমন অক্ষরগুলি থাকতে পারে তবে আপনাকে সেগুলি এড়িয়ে চলতে হবে। আরও দেখুন: /programming/4024188/php-function-to-escape-mysql-regexp-syntax


3

গৃহীত উত্তর সঠিকভাবে কাজ করে না। এটি পাঠ্যের আগে এবং পরে কেবল স্থান পরীক্ষা করছে।

মনে করুন, আপনার নিম্নলিখিত তালিকা রয়েছে

  • জ্যাকেট
  • সামার জ্যাকেট
  • শীতকালীন জ্যাকেট

এখন আপনি যদি স্বীকৃত উত্তরটি ব্যবহার করে জ্যাকেটটি অনুসন্ধান করার চেষ্টা করেন তবে এটি কেবল গ্রীষ্মকালীন জ্যাকেট এবং শীতের জ্যাকেটটি ফিরিয়ে দেবে

আমি মনে করি নিম্নলিখিত সমাধানগুলি আরও ভাল

$collection->addAttributeToFilter('name', array('like' => '%' . $needle. '%'));

এটি প্রশ্ন থেকে কেসটি (গ) কাভার করবে না (অর্থাত্ "জ্যাকেটিং" এর সাথেও মেলে)। পরিবর্তে, চতুর্থ শর্তটি ['eq' => $needle]সঠিক ম্যাচগুলি অনুসন্ধান করার জন্য যুক্ত করা যেতে পারে (বা আরও ভাল, কেবলমাত্র ফাঁকা নয়, সমস্ত সীমানা খুঁজে বের করে এমন রেইগেক্স সমাধানটি ব্যবহার করুন)
ফ্যাবিয়ান শেমংলার

উপরের কোডটি সঠিক মিলগুলি খুঁজে পেতে সক্ষম। আমি এটি চেক করেছি
দিনেশ যাদব

আমি তাতে সন্দেহ করিনি। তবে এটি আরও সন্ধান করে যা এটি করা উচিত নয়। কমপক্ষে আপনার যদি মূল প্রশ্নের মতো একই প্রয়োজনীয়তা থাকে: "ফু বার" অনুসন্ধান করার সময় "ফু বেয়ার" খুঁজে পাবেন না
ফ্যাবিয়ান শেমংলার

হ্যাঁ তুমিই ঠিক. গৃহীত উত্তরটি আমার পক্ষে সঠিকভাবে কাজ করছে না তাই অনুরূপ আইটেমগুলি পাওয়ার জন্য আমি সাধারণ এক-লাইন ফিল্টারটি প্রস্তাব করেছি।
দিনেশ যাদব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.