Ajax-запрос 500 при добавлении переменной красноречивого отношения к назначению конкатенации в Laravel Controller, отлично работает без переменной - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть запрос Ajax, который работает правильно, но при попытке добавить переменную в конкатенационное назначение '$ output' я получаю ошибку 500.

Это для приложения, использующего laravel для отображения ресурсов, связанных с выбранными темами.Существуют красноречивые отношения ownToMany, от тем к статьям, лифтам, цитатам и визуальным элементам, которые являются обратными и работают правильно

Это функция ajax в моем контроллере:

public function action(Request $request)
{
 if($request->ajax())
 {
  $topics = Topics::orderBy('Topic', 'asc')->get();
  $output = '';
  $query = $request->get('query');
  //query
  if($query != '')
  {
   $data = DB::table('topics')
     ->where('topic', 'like', '%'.$query.'%')
     ->where('slug', 'like', '%'.$query.'%')
     ->get();
  }
  else
  {
    $data = $topics;
  }
  //updating variables with query data
  $total_row = $data->count();
  if($total_row > 0)
  {
   foreach($data as $row)
   {
    // combining resources associated with topics <-- $resource is the trouble variable!!
    $resource = $row->articles->count() + $row->lifts->count() + $row->visuals->count() + $row->quotes->count();
    $output .= '<tr><td><a href="/topics/'.$row->slug.'">'.$row->topic.'</a> '.$resource.'</td></tr>';
   }
  }
  else
  {
   $output = '<tr><td align="center" colspan="5">No Data Found</td></tr>';
  }
  $data = array(
   'table_data'  => $output
  );

  echo json_encode($data);
 }
}

мой клинок

    <!DOCTYPE html>
    <html>
     <head>
      <title>Live search in laravel using AJAX</title>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
      <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
     </head>
     <body>
         <div class="form-group">
          <input type="text" name="search" id="search" class="form-control" placeholder="Search Topics" />
         </div>
         <div class="table-responsive">
          <table class="table table-striped table-bordered">
           <tbody>
           </tbody>
          </table>
         </div>
     </body>
    </html>
    <script>
    $(document).ready(function(){
     fetch_topic_data();
     function fetch_topic_data(query = '')
     {
      $.ajax({
       url:"{{ route('live_search.action') }}",
       method:'GET',
       data:{query:query},
       dataType:'json',
       success:function(data)
       {
        $('tbody').html(data.table_data);
       }
      })
     }
     $(document).on('keyup', '#search', function(){
      var query = $(this).val();
      fetch_topic_data(query);
     });
    });
    </script>

Ошибки консоли

GET http://127.0.0.1:8000/live_search/action?query=te 500 (Internal Server Error)
    send    @   jquery.min.js:4
    ajax    @   jquery.min.js:4
    fetch_topic_data    @   live_search:26
    (anonymous) @   live_search:39
    dispatch    @   jquery.min.js:3
    q.handle    @   jquery.min.js:3

С переменной $ resource запрос не работает, но темы правильно отображаются на странице.

с $ resource

with $resource

без $ resource

Without $resource

Когда я удаляю $ resource,запрос работает, но, очевидно, я хотел бы отобразить тему и результаты запроса с количеством ресурсов, связанных с содержанием темы, например:

Сократ 1

Любая помощь очень ценится!Спасибо за ваше время.

1 Ответ

0 голосов
/ 08 февраля 2019

После некоторых исследований и помощи я нашел решение!

В другом месте кто-то предлагал изменить запрос к БД на модельный запрос

    if($query != '')
    { 
    $data = DB::table('topics') ->where('topic', 'like', '%'.$query.'%') ->where('slug', 'like', '%'.$query.'%') ->get();
    } else { 
    $data = $topics; 
    }

Сейчас

    if($query != '')
    {
    $data = Topics::where('topic', 'like', '%'.$query.'%')->where('slug', 'like', '%'.$query.'%')->get();
    }
    else
    {
    $data = $topics;
    }

Я не знал, что ты мог это сделать!

https://laravel.com/docs/5.7/eloquent#query-scopes

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...