У меня есть вводимый текст для поиска, который использует ajax для поиска некоторых статей (статья - это модель). Кроме того, я установил отношения "один ко многим" с другой моделью "ArticleFile". По сути, мне нужно посмотреть, есть ли значение, которое содержит строку в столбцах «заголовок» или «описание» таблицы статей ИЛИ (это самая сложная часть) внутри имени столбца из таблицы файлов статей со столбцом article_id. Поскольку многие статьи содержат список прикрепленных к ним файлов, есть ли способ выполнить поиск, если в заголовке статьи, описании или прикрепленных к ней именах файлов есть определенная строка, напоминающая мой код? Или есть другой способ добиться этого?

Отношения один-ко-многим в моей модели статьи:

public function files() {
   return $this->hasMany(ArticleFile::class);
}

В моем php-файле из вызова ajax у меня есть следующий метод для получения нужных статей (который не работает):

public function ajax_article_search()
{
  $value = $_POST['value'];
  $html = '';

  if($value) {
    
    // search if the title
    // or description
    // or filenames (of the relationship one-to-many)
    // have a certain $value
    $articles = Article::where('title', 'like', '%'.$value.'%') 
      ->orWhere('description', 'like', '%'.$value.'%') 
      ->files->where('filename', 'like', '%'.$value.'%') 
      ->get(); 
    
    // -- Code above not working
    // Error because of ->files...
        
    foreach($articles as $article) {
      $html .= '<a href="'.$article->url.'">';
      $html .= '<p>'.$article->title.'</p>';
      $html .= '</a>';
    }
  }

  echo $html;
}
0
Citizen6022140857 27 Ноя 2021 в 11:28

1 ответ

Лучший ответ