Оптимизировать Laravel Запрос - PullRequest
0 голосов
/ 13 апреля 2020

пожалуйста, кто-нибудь может оптимизировать этот запрос согласно Laravel построителю запросов с помощью объединений

Product::select(DB::raw('
            products.*
            ,(select name from users where users.id=products.user_id) as user_name
          '))
                ->where(function ($query) use ($searchKey) {
                    if (trim($searchKey) != '') {
                        $query->where('name', 'like', '%' . trim($searchKey) . '%');
                    }
                })
                ->orderBy($orderBy,$orderType)
                ->paginate(10) 

1 Ответ

1 голос
/ 13 апреля 2020

Может быть что-то вроде этого:

//Start your query as usual, but just join the user data in. Do not use paginate function yet as this will trigger the query to execute.
$productQuery = Product
    ::selectRaw('products.*, users.name as user_name')
    ->join('users', 'users.id', 'products.user_id')
    ->orderBy($orderBy, $orderType);
//Check (for each param) if you want to add where clause
//You dont need to nest the where function, unless you have more filters, and need to group statements together
if(!empty(trim($searchKey))) {
    $productQuery->where('name', 'like', '%' . trim($searchKey) . '%');
}
//Execute query
$products = $productQuery->paginate(10);

Обратите внимание, что построитель запросов касается БД только с указанными c функциями, такими как chunk, get, first или paginate (там более). При создании запроса у вас есть полная свобода добавления фильтров / упорядочения / группировки, пока вы не выполните запрос.

Надеюсь, это поможет, пожалуйста, дайте мне знать, сработало ли это для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...