我有两个模型用户和演员,它们之间存在一对一的关系。用户表具有名称,电子邮件(唯一)和用户类型(演员/制片人)列。 我想了解所有演员的详细信息。为此,我正在使用以下代码。
$ 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分钟。
请帮助我提供可行的解决方案。
谢谢。