수색…


Yii2 쿼리 빌더 사용

Yii2는 데이터베이스에서 데이터를 검색하는 효율적인 방법을 제공합니다. emp_id, emp_name 및 emp_salary 필드가있는 간단한 직원 테이블의 예를 고려하십시오 . 직원 이름과 급여를 검색하기 위해 우리는 쿼리를 사용합니다.

select emp_name,emp_salary from employee

Yii2에서 위 쿼리를 생성하기 위해 많은 메소드가 있습니다. 메소드 중 하나는 yii \ db \ Quer y 객체를 사용하는 것입니다.

//creates a new \yii\db\Query() object
$query=new \yii\db\Query(); 

$rows=$query->select(['emp_name','emp_salary']) //specify required columns in an array
             ->from('employee') //specify table name
             ->all(); //returns an array of rows with each row being an associative array of name-value pairs.

foreach 루프를 사용하여 $ rows 배열의 각 이름 - 값 쌍을 반복 할 수 있습니다.

foreach ($rows as $row) {
    echo "Employee Name: ".$row['emp_name'].",Employee Salary: ".$row['emp_salary']."<br>";
}

그러면 출력됩니다.

직원 이름 : Kiran, 직원 급여 : 25000

종업원 이름 : Midhun, 직원 급여 : 50000

직원 이름 : Jishnu, 직원 급여 : 20000

직원 이름 : Ajith, 직원 급여 : 25000

종업원 이름 : Akshay, 직원 급여 : 750000

추가 예제

급여가 25000 인 직원의 이름을 찾아야한다고 가정합니다.이 쿼리는 sql 형식으로 작성할 수 있습니다.

select emp_name from employee where salary=25000

Yii2에서 위 쿼리를 생성하는 코드

$query=new \yii\db\Query(); 

$rows=$query->select(['emp_name']) 
            ->from('employee')
            ->where(['emp_salary'=>25000]) //specify the condition as an associative array where key is column name
            ->all(); 

급여가 25000보다 큰 직원 이름을 찾아야하는 경우 Yii2에 코드를 다음과 같이 작성할 수 있습니다.

  $rows=$query->select(['emp_name']) 
        ->from('employee')
        ->where(['>','emp_salary', 25000]) 
//Here first element in the above array specify relational operator used, second element specify the table name and third the value itself.
        ->all();  

where ()를 사용하여 더 많은 조건 확인

아래 조건에 따라 where () 메서드를 사용하여 여러 조건을 작성할 수 있습니다.

// Creates a new \yii\db\Query() object
$query = new \yii\db\Query();
$rows = $query->select(['emp_name','emp_salary']) 
        ->from('employee')
        ->where(['emp_name' => 'Kiran', 'emp_salary' => 25000]) // Specify multiple conditions
        ->one(); // Returns the first row of the result

위의 코드는 kiran 및 salary 25000 이라는 이름을 가진 직원을 가져옵니다. 여러 직원이 위의 조건을 만족하는 경우, 호출 한 () 첫 번째 결과를 가져올 것을 확인합니다. 모든 결과를 가져 오려면 all ()을 사용해야 합니다 .

all () 을 사용하면 결과는 항상 배열이됩니다. 결과가 1 개 또는 0 개 인 경우에도 마찬가지입니다. 이 배열은 모든 결과를 배열로 포함하거나 일치하는 레코드가 없을 때 비어 있습니다. 쿼리 one 이 결과를 직접 반환하거나 쿼리가 아무것도 반환하지 않으면 false를 반환합니다.

sql의 동일한 코드가 아래에 나와 있습니다.

select emp_name, emp_salary from employee where emp_name = 'Kiran' and emp_salary = 25000 limit 1;

Yii2에서 위 쿼리를 작성하는 또 다른 방법은 다음과 같습니다.

$rows = $query->select(['emp_name', 'emp_salary']) 
    ->from('employee')
    ->where(['emp_name' => 'Kiran'])
    ->andWhere(['emp_salary' => 25000])
    ->one();

추가 조건 세트는 andWhere를 사용하여 지정할 수 있습니다. 나중에 조회에 조건 점검을 추가해야하는 경우 유용합니다.

여러 조건을 지정하는 또 다른 방법 where () 메소드의 연산자 형식을 사용하는 것입니다. 위 쿼리는 다음과 같이 작성할 수도 있습니다.

 $rows = $query->select(['emp_name','emp_salary']) 
    ->from('employee')
    ->where(['and', 'emp_name="kiran"', 'emp_salary=25000'])        
    ->one();

여기에 연산자의 ' and '를 배열의 첫 번째 요소로 지정합니다. 마찬가지로 우리는 또한, '존재' '좋든 싫든'사용 '또는', '사이', '싫어', '같은', 'NOT IN', '에', '없는 사이' '나 같은'수 , ' 존재하지 않음 ', ' > ', ' <= '등이 있습니다.

'in'및 'like'를 사용하는 예

급여가 20000, 25000 및 50000 인 직원을 찾아야한다고 가정합니다. 정상적인 SQL에서는 쿼리를 다음과 같이 작성합니다.

select * from employee where salary in (20000,25000,50000)

Yii2에서는 아래와 같이 이것을 쓸 수 있습니다.

$rows = $query->from('employee')
        ->where(['emp_salary' => [20000,25000,50000]]) 
        ->all();

같은 조건을 지정하는 또 다른 방법은 다음과 같습니다.

$rows = $query->from('employee')
    ->where(['in', 'emp_salary', [20000,25000,50000]]) // Making use of operator format of where() method
    ->all();

우리가 20000, 25000 및 50000 급여가없는 모든 직원을 얻고 자한다면 ' in '대신 ' not in '을 ' in '대신 지정할 수 있습니다.

이제 where () 조건에서 ' like '를 사용하는 몇 가지 예를 살펴 보겠습니다. 이름에 ' gopal '문자열이있는 모든 직원을 찾아야한다고 가정합니다. 이름은 venugopal, rajagopal, gopalakrishnan 등이 될 수 있습니다. SQL 쿼리는 아래와 같습니다.

select * from employee where emp_name like '%gopal%'

Yii2에서는 다음과 같이 작성할 것입니다.

 $rows = $query->from('employee')
        ->where(['like', 'emp_name', 'gopal']) // Making use of operator format of where() method
        ->all();

이름에 ' gopal '및 ' nair '문자열이있는 모든 직원을 찾아야하는 경우 우리는 다음과 같이 작성할 수 있습니다.

   $rows = $query->from('employee')
        ->where(['like', 'emp_name', ['gopal','nair']]) // Making use of operator format of where() method
        ->all();

이것은 다음과 같이 평가할 것이다.

emp_name과 같이 '% gopal %'및 '% nair %'와 (과) 같은 직원을 선택하십시오.

마찬가지로 우리는 이름에 ' gopal '및 ' nair '문자열이없는 모든 직원을 나타 내기 위해 ' 좋지 않음 '을 사용할 수 있습니다.

orderBy () 사용하기

orderBy () 메소드는 SQL 쿼리의 ORDER BY 부분을 지정합니다. 예를 들어 emp_id, emp_first_name, emp_last_name 및 emp_salary 필드가있는 직원 테이블을 고려하십시오. 직원 급여의 순서를 늘려 결과를 주문해야합니다. sql을 사용하십시오.

Select * from employee order by emp_salary

yii2에서는 아래와 같이 쿼리를 작성할 수 있습니다.

 //creates a new \yii\db\Query() object
    $query=new \yii\db\Query();

    $rows= $query->from('employee')->orderBy([
    'emp_salary' => SORT_ASC //specify sort order ASC for ascending DESC for descending      
    ])->all();

우리가 이름을 오름차순으로, 그리고 급여를 내림차순으로 주문해야한다면 다음과 같이 일반 SQL로 작성할 수 있습니다.

Select * from employee order by emp_first_name ASC, emp_salary DESC

동등한 SQL은 다음과 같이 yii2를 사용하여 빌드 할 수 있습니다.

//creates a new \yii\db\Query() object
    $query=new \yii\db\Query();

    $rows= $query->from('employee')->orderBy([
    'emp_first_name' => SORT_ASC
    'emp_salary' => SORT_DESC      
    ])->all();

원시 SQL 문을 작성할 때처럼 문자열을 사용하여 ORDER BY를 지정할 수도 있습니다. 예를 들어 위의 쿼리는 아래와 같이 생성 될 수 있습니다.

//creates a new \yii\db\Query() object
$query=new \yii\db\Query();
$rows=$query->from('employee')->orderBy('emp_first_name ASC, emp_salary DESC')->all();

addOrderBy ()를 호출하여 열을 ORDER BY 단편에 추가 할 수 있습니다. 예를 들어

//creates a new \yii\db\Query() object
$query=new \yii\db\Query();
$rows=$query->from('employee')->orderBy('emp_first_name ASC')
    ->addOrderBy('emp_salary DESC')->all();


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow