Laravel / SQL: как получить данные из нескольких таблиц в одном запросе? это тоже с использованием «где» - PullRequest
0 голосов
/ 28 июня 2018

Работа над функцией поиска в приложении Laravel (блог / сообщения). Существует несколько типов сообщений (каждый из которых имеет отдельную таблицу в базе данных) Как деловые сообщения, сообщения социальной жизни и т. Д.

Ниже приведена функция поиска в SearchController

class SearchController extends Controller
{
public function search(Request $request, $query = null)
{
    if($query == null)
        return redirect()->route('home');

    $search = Business::where([['title','like','%'.$query.'%'],['status','=',1]])
                        ->orWhere([['description','like','%'.$query.'%'],['status','=',1]])                         
                        ->paginate(10);

    return view('front.search',[
        'results' => $search,
        'query' => $query
    ]);
}

}

Итак, в основном мой вопрос заключается в том, как добавить и другие типы таблицы Поста?

Мой основной мотив заключается в том, что когда кто-то ищет что-то, результат должен быть получен из всех типов сообщений (бизнес, природа, жизнь и т. Д.).

Ответы [ 3 ]

0 голосов
/ 28 июня 2018

Если у вас есть модель с именем Book, например:

class Book extends Model
{
    /**
     * Get the author that wrote the book.
     */
    public function author()
    {
        return $this->belongsTo('App\Author');
    }
}

Затем вы можете получить все свои книги у авторов, как это:

$books = App\Book::with(['author'])->get();

Оформить Стремительная загрузка из документации Laravel.

0 голосов
/ 02 июля 2018

Просто добавьте имя таблицы перед каждым полем

   $querys = DB::table('Business')->where([['Business.title','like','%'.$query.'%'],['Business.status','=',1]])
                        ->orWhere([['Business.description','like','%'.$query.'%'],['Business.status','=',1]]);

   $querys->join('socialtable','socialtable.userid','=','Business.userid'); 
   // Just join the social table
   $querys->where('socialtable.title',  'like','%'.$query.'%'); 
   $result = $querys->paginate(10);
0 голосов
/ 28 июня 2018

Вы должны поддерживать общий идентификатор в обеих таблицах

ПРИМЕЧАНИЕ. Соединение является предпочтительным методом

   $querys = DB::table('Business')->where([['Business.title','like','%'.$query.'%'],['Business.status','=',1]])
                        ->orWhere([['Business.description','like','%'.$query.'%'],['Business.status','=',1]]);

   $querys->join('socialtable','socialtable.userid','=','Business.userid'); 
   // Just join the social table
   $querys->where('socialtable.title',  'like','%'.$query.'%'); 
   $result = $querys->paginate(10);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...