박주니 개발 정리

laravel query문 최적화 본문

라라벨

laravel query문 최적화

박주니 2023. 6. 28. 10:17
728x90
반응형

설명 이유

코드를 최적화하지 않으면 불필요한 코드가 많아지고 코드가 길어져서 나중에 유지보수할 때도 해당 문제되는 코드를 

찾는데 시간이 많이 소모되는 것을 보게 되었습니다. 확실히 이렇게 코드를 작성하니 코드가 몇백줄 넘어가는 것을 100줄 이내로 줄일 수 있었습니다. 

 

참고 

현재 설명은 laravel을 어느정도 이해하고 사용하고 있다는 기준에서 설명을 진행했습니다. 

 

잘못된 방법

if($request->select == "title"){
	$test = TEST::where([['user_id',1],[title, $request->value]])->get();
}
else if($request->select == "description"){
	$test = TEST::where([['user_id',1],[description, $request->value]])->get();
}

현재 이코드를 보면 제가 최적화를 하기 전에는 조건에 따라서 where을 추가해야할 때 전체 qeury 구문에 추가해서 작업을 했습니다. 하지만 지금 이건 기본 예시로 만든 것인데 만약 여러 조건에 따른 join 및 where이 추가적으로 진행할 때에는 모든 경우의 수만큼 조건을 추가하게 되면 중복된 코드가 많아지게 됩니다. 

 

추천 방법

$test = TEST::where('user_id',1);

if($request->select == "title"){
	$test->where(title, $request->value);
}
else if($request->select == "description"){
	$test->where(description, $request->value);
}

$tests = $test->get();

설명

먼저 공통으로 사용하고 있는 where 조건은 user_id가 1인 것이고 조건에 따라서 필요한 where만 추가하면 됩니다. 

그리고 라라벨은 순차적으로 진행하기 때문에 최종 $test는 해당 조건을 다 이행한 것을 가지고 오기 때문에 

$tests = $test->get();으로 해서 원하는 값을 가지고 오시면 됩니다. 

 

응용 방법 (join)

$test = TEST::join('users','users.id','=','tests.user_id')->where('user_id',1);

if($request->select == "title"){
	$test->join('commends','commend.test_id','=','tests.id')->where(title, $request->value);
}
else if($request->select == "description"){
	$test->where(description, $request->value);
}

$tests = $test->get();

설명

공통으로 사용하는 있는 users id join을 기준으로 하고 조건에 따라서 join 도 추가해서 진행할 수 있습니다. 

 

 

728x90
반응형
Comments