У меня есть две модели: пользователь и актер с отношением один к одному.Таблица пользователя содержит столбец с именем, адресом электронной почты (уникальный) и типом пользователя (актер / режиссер).Я хочу получить все детали актеров.Для этого я использую следующий код:
$ actorlist = Actor :: with ('user') -> paginate (15);
, но этоочень медленный, когда количество актеров больше.
Также для функции поиска я использую следующий код.
*$actorlist = Actor::join('users', function ($join) {
$join->on('actors.user_id', '=', 'users.id');
})->newQuery();
if ($request->has('has_voice')) {
$actorlist->has('voices');
}
if ($request->has('has_video')) {
$actorlist->has('shows');
}
if ($request->has('has_imdb')) {
$actorlist->where('imdb_link', '!=', null);
}
if ($request->has('hair_colour') && $request->input('hair_colour') != 'any hair colour') {
$actorlist->where('hair_colour', 'LIKE', $request->input('hair_colour'));
}
if ($request->has('gender') && $request->input('gender') != 'any gender') {
$actorlist->where('gender', 'LIKE', $request->input('gender'));
}
if ($request->has('ethnicity') && $request->input('ethnicity') != 'any ethnicity') {
$actorlist->where('ethnicity', 'LIKE', "%{$request->input('ethnicity')}%");
}
if ($request->has('eye_colour') && $request->input('eye_colour') != 'any eye colour') {
$actorlist->where('eye_colour', 'LIKE', $request->input('eye_colour'));
}
if ($request->has('hair_colour') && $request->input('hair_colour') != 'any hair colour') {
$actorlist->where('hair_colour', 'LIKE', $request->input('hair_colour'));
}
if ($request->has('min_age')) {
$actorlist->where('min_age', '>=', $request->input('min_age'));
}
if ($request->has('max_age')) {
$actorlist->where('max_age', '<=', $request->input('max_age'));
}
if ($request->has('min_height') && $request->has('max_height')) {
$actorlist->whereBetween('height', [floatval($request->input('min_height')), floatval($request->input('max_height'))]);
}
if($request->has('name') && $request->input('name') != ''){
$keywords = $searchValues = preg_split('/\s+/', $request->input('name'), -1, PREG_SPLIT_NO_EMPTY);
$actorlist->where(function ($q) use ($keywords) {
foreach ($keywords as $value) {
$q->orWhere('users.first_name', 'like', "%{$value}%");
$q->orWhere('users.last_name', 'like', "%{$value}%");
}
});
}
$actorlist = $actorlist->paginate(15);*
На загрузку уходит почти 5 минут.
Пожалуйста, помогите мне с возможными решениями.
Заранее спасибо.