Реализую поиск по нескольким таблицам в бд. Сейчас такой вариант:
$pages = Page::select('pages.id', 'pages.title', 'pages.slug')->where('title', 'LIKE', '%' . $string . '%');
$categories = Category::select('categories.id', 'categories.name', 'categories.fullSlug')->where('name', 'LIKE', '%' . $string . '%');
//Еще несколько таких же конструкций
$results = DB::table('posts as post')->select('post.id', 'post.title', 'post.slug')->where('title', 'LIKE', '%' . $string . '%')
$results = $results->union($pages)->union($categories)->get();
Вывод по запросу "кат":
#items: array:16 [
0 => {#1279
+"id": 126
+"title": "Категория 2"
+"slug": "category-2"
}
1 => {#1281
+"id": 745
+"title": "Пост в категории"
+"slug": "post-in-category"
}
2 => {#1424
+"id": 801
+"title": "Страница-кат"
+"slug": "page-cat"
}
...
]
И вот в чем фигня. Все 3 результата из трех разных таблиц. Причем самая первая категория, у нее нет значения title, вместо него у нее name. Но имя у нее все равно отображается как title. Как узнать из какой таблицы было найдено значение? Потому что запросы мне надо разделить по категориям.
Говорят надо писать "From table as table1" типа того, я попробовал - алиасы никакую роль не играют ,вывод аналогичный. Есть другой вариант, задавать алиасы в селекте. Типа: 'category.name as category_name' и подобные. Но что, если поиск мы производим по 10 таблицам? А если по 20? Это же запаришься всем давать алиасы, и, самое главное, потом на вьюхе писать условия вида:
if( isset($result->category_name) ) {
//this is categories table
}
Как впихнуть в вывод (результат) имя таблицы, чтобы вывод стал таким?:
#items: array:16 [
0 => {#1279
+"id": 126
+"title": "Категория 2"
+"slug": "category-2",
'table' : 'categories'
}
1 => {#1281
+"id": 745
+"title": "Пост в категории"
+"slug": "post-in-category",
'table' : 'posts'
}
2 => {#1424
+"id": 801
+"title": "Страница-кат"
+"slug": "page-cat",
'table' : 'pages'
}
...
]