Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Кто поможет с кодом?
Форумы портала PHP.SU » » Вопросы новичков » Кто поможет с кодом?

Страниц (1): [1]
 

1. kikosik666 - 01 Ноября, 2019 - 10:35:49 - перейти к сообщению
Код для поиска на сайте.

Почему ->where('key', 'like', '%' . $url . '%') не работает?

Хочу чтобы в базе искал те строки у которых урл совпадает с $page_url

Спасибо

PHP:
скопировать код в буфер обмена
  1. public function searchresult(Request $request) {      
  2.                            
  3.             $page_url = [
  4.                     'local-programs',
  5.                     'international-projects',
  6.                     'grants',
  7.                     'news',
  8.                     'press-about-us',
  9.                     'events',
  10.                     'interesting-corner',
  11.                     'annual',
  12.                     'implemented',
  13.                     'events-and-trainings'
  14.                 ];
  15.                            
  16.             $search_word = $request->input('search');              
  17.            
  18.             foreach($page_url as $url)
  19.             {
  20.                 $url = $url;
  21.                
  22.             }
  23.          
  24.                 $search_result = Article::select()
  25.                 ->where('title_am', 'like', '%' . $search_word . '%')
  26.                 ->where('key', 'like', '%' . $url . '%')
  27.  
  28.                 ->get();                      
  29.                 return view('site.search', compact('search_result'));
  30.              
  31.      
  32.     }
2. andrewkard - 01 Ноября, 2019 - 16:35:47 - перейти к сообщению
kikosik666 пишет:
foreach($page_url as $url)
{
$url = $url;

}

Вы понимаете что Вы тут делаете?
Толочь воду в ступе...

Проверять нужно функцией in_array
(Добавление)
Как получить нужную часть запроса посмотрите тут:
https://stackoverflow[dot]com/questi[dot][dot][dot]ith-query-string
потом посмотрите есть ли она в массиве $page_url, и если совпадение есть, проводим поиск.

Кроме того, поиск по LIKE может сильно нагружать БД и выполнятся очень долго. Лучше так не искать.
3. armancho7777777 - 02 Ноября, 2019 - 13:47:10 - перейти к сообщению
Полагаю, используете Laravel.
PHP:
скопировать код в буфер обмена
  1. $search_result = Article::select()
  2.     ->where('title_am', 'like', '%' . $search_word . '%')
  3.     ->whereIn('key', 'like', array_map(function($url) {
  4.         return "%$url%";
  5.     }, $page_url))
  6.     ->get();
  7.  
  8. // Or...
  9. $search_result = Article::select()
  10.     ->where('title_am', 'like', '%' . $search_word . '%')
  11.     ->where(function($query) use ($page_url) {
  12.         $query->where('key', 'like', '%' . array_shift($page_url) . '%');
  13.         foreach ($page_url as $url) {
  14.             $query->orWhere('key', 'like', "%$url%");
  15.         }
  16.     })
  17.     ->get();
  18.  

 

Powered by ExBB FM 1.0 RC1