programing

DB:: select의 출력이 phpMyAdmin의 raw 쿼리와 다릅니다.

sourcejob 2022. 10. 15. 09:57
반응형

DB:: select의 출력이 phpMyAdmin의 raw 쿼리와 다릅니다.

Laravel 어플리케이션에서 사용하고 있는 MariaDB 쿼리가 있는데 7개의 컬럼을 반환하고 싶습니다.결과 어레이를 PHP로 덤프하면 4만 반환되는 것 같습니다.그러나 동일한 쿼리를 PhpMyAdmin SQL 에디터에서 실행하면 예상대로 7개가 모두 반환됩니다.

Larabel이 4개의 열, 상태, 이름, 전화번호 및 설명만으로 결과를 필터링한 이유가 무엇인지 궁금했을 뿐입니다.

감사합니다!

Laravel 쿼리:

    $entries = DB::select('SELECT status, contacts.name, contacts.telephone_number, companies.name, roles.name, stages.description, actions.description FROM entries JOIN contacts ON entries.contact_id = contacts.id JOIN companies ON contacts.id = companies.contact_id JOIN roles ON companies.id = roles.company_id JOIN stages ON roles.id = stages.role_id JOIN actions ON stages.id = actions.stage_id');

Larabel에서의 출력 쿼리

PHPMyAdmin SQL Editor 쿼리:

    SELECT status, contacts.name, contacts.telephone_number, companies.name, roles.name, stages.description, actions.description FROM entries JOIN contacts ON entries.contact_id = contacts.id JOIN companies ON contacts.id = companies.contact_id JOIN roles ON companies.id = roles.company_id JOIN stages ON roles.id = stages.role_id JOIN actions ON stages.id = actions.stage_id

PHPMyAdmin에서의 출력 쿼리

두 경우 모두 같은 결과입니다.같은 속성을 사용하기 때문에 웅변적인 결과가 서로 덮어쓰게 됩니다.에일리어스를 사용하여 문제를 해결하다

SELECT status, contacts.name as contact_name, contacts.telephone_number, companies.name as company_name, roles.name as role_name , stages.description, actions.description FROM entries JOIN contacts ON entries.contact_id = contacts.id JOIN companies ON contacts.id = companies.contact_id JOIN roles ON companies.id = roles.company_id JOIN stages ON roles.id = stages.role_id JOIN actions ON stages.id = actions.stage_id

@N69S가 응답한 대로 오버라이드를 피하기 위해 에일리어스를 설정해야 합니다.또 하나, 만약 당신이 Laravel을 사용하고 있다면, 웅변은 당신의 친구입니다.

$entries = DB::table('entries')
    ->join('contacts', 'entries.contact_id', '=', 'contacts.id')
    ->join('companies', 'contacts.id', '=', 'companies.contact_id')
    ->join('roles', 'companies.id', '=', 'roles.company_id')
    ->join('stages', 'roles.id', '=', 'stages.role_id')
    ->join('actions', 'stages.id', '=', 'actions.stage_id')
    ->select('status', 'contacts.name AS contact_name', 'contacts.telephone_number', 'companies.name AS company_name', 'roles.name AS role_name', 'stages.description AS stage_description', 'actions.description AS action_description')
    ->get();

더 나은 접근법은 모델을 사용하고 관계를 설정하는 것입니다.

언급URL : https://stackoverflow.com/questions/63449714/output-of-dbselect-is-different-from-raw-query-in-phpmyadmin

반응형