>백엔드 개발 >PHP 튜토리얼 >Eloquent ORM 연구 노트

Eloquent ORM 연구 노트

WBOY
WBOY원래의
2016-08-08 09:31:09892검색

 최근에 Laravel을 배우고 있는데 ORM 기능이 매우 강력하다고 생각합니다. 여기서는 간략하게 살펴보았는데 더 좋은 노트가 있으면 공유해 주세요.

Eloquent ORM에 중점을 두기 때문에 라우팅 설정과 컨트롤러에 대해서는 자세히 설명하지 않습니다. 여기서는 모델 모듈로 직접 이동합니다.

1. 데이터베이스 준비(Mysql)

여기서는 users와 users_ext라는 두 개의 테이블을 생성하고 데이터를 초기화해야 합니다.  

<span> 1</span> <span>CREATE</span> <span>TABLE</span>
<span> 2</span> <span>IF</span> <span>NOT</span> <span>EXISTS</span><span> users (
</span><span> 3</span>     iAutoId <span>INT</span> (<span>11</span>) <span>NOT</span> <span>NULL</span><span> AUTO_INCREMENT,
</span><span> 4</span>     sNmame <span>VARCHAR</span> (<span>20</span><span>),
</span><span> 5</span>     iStatus <span>TINYINT</span> (<span>4</span><span>),
</span><span> 6</span>     iCreateTime <span>INT</span> (<span>11</span><span>),
</span><span> 7</span>     <span>PRIMARY</span> <span>KEY</span><span> (iAutoId)
</span><span> 8</span> ) ENGINE <span>=</span> INNODB <span>DEFAULT</span> CHARSET <span>=</span> utf8 AUTO_INCREMENT <span>=</span> <span>1</span><span>;
</span><span> 9</span> 
<span>10</span> <span>INSERT</span> <span>INTO</span><span> users (sNmame, iStatus, iCreateTime)
</span><span>11</span> <span>VALUES</span>
<span>12</span>     (<span>'</span><span>test1</span><span>'</span>, <span>1</span>, <span>1400085387</span><span>),
</span><span>13</span>     (<span>'</span><span>test2</span><span>'</span>, <span>1</span>, <span>1400085387</span><span>),
</span><span>14</span>     (<span>'</span><span>test3</span><span>'</span>, <span>1</span>, <span>1400085387</span><span>),
</span><span>15</span>     (<span>'</span><span>test4</span><span>'</span>, <span>1</span>, <span>1400085387</span><span>),
</span><span>16</span>     (<span>'</span><span>test5</span><span>'</span>, <span>1</span>, <span>1400085387</span><span>),
</span><span>17</span>     (<span>'</span><span>test6</span><span>'</span>, <span>1</span>, <span>1400085387</span><span>);
</span><span>18</span> 
<span>19</span> <span>CREATE</span> <span>TABLE</span>
<span>20</span> <span>IF</span> <span>NOT</span> <span>EXISTS</span><span> users_ext (
</span><span>21</span>     iAutoId <span>INT</span> (<span>11</span>) <span>NOT</span> <span>NULL</span><span> AUTO_INCREMENT,
</span><span>22</span>     iAge <span>DECIMAL</span> (<span>3</span>, <span>0</span><span>),
</span><span>23</span>     sSex <span>TINYINT</span> (<span>4</span><span>),
</span><span>24</span>     iUserID <span>INT</span> (<span>11</span><span>),
</span><span>25</span>     <span>PRIMARY</span> <span>KEY</span><span> (iAutoId)
</span><span>26</span> ) ENGINE <span>=</span> INNODB <span>DEFAULT</span> CHARSET <span>=</span> utf8 AUTO_INCREMENT <span>=</span> <span>1</span><span>;
</span><span>27</span> 
<span>28</span> <span>INSERT</span> <span>INTO</span><span> users_ext (iAge, sSex, iUserID)
</span><span>29</span> <span>VALUES</span>
<span>30</span>     (<span>24</span>, <span>1</span>, <span>1</span><span>),
</span><span>31</span>     (<span>109</span>, <span>0</span>, <span>2</span><span>),
</span><span>32</span>     (<span>25</span>, <span>1</span>, <span>3</span><span>),
</span><span>33</span>     (<span>20</span>, <span>1</span>, <span>5</span><span>),
</span><span>34</span>     (<span>68</span>, <span>0</span>, <span>4</span><span>),
</span><span>35</span>     (<span>48</span>, <span>1</span>, <span>6</span>);

2. 데이터베이스 구성

Database.php에 데이터베이스 구성 추가:

 

<span> 1</span> <?<span>php
</span><span> 2</span> 
<span> 3</span> <span>return</span><span> [
</span><span> 4</span> 
<span> 5</span>     'fetch' => PDO::FETCH_CLASS,
<span> 6</span> 
<span> 7</span>     'default' => 'user',
<span> 8</span> 
<span> 9</span>     'connections' =><span> [
</span><span>10</span>         'user' =><span> [
</span><span>11</span>             'driver'    => 'mysql',
<span>12</span>             'host'      => 'localhost:3306',
<span>13</span>             'database'  => 'test',
<span>14</span>             'username'  => 'root',
<span>15</span>             'password'  => 'root',
<span>16</span>             'charset'   => 'utf8',
<span>17</span>             'collation' => 'utf8_unicode_ci',
<span>18</span>             'prefix'    => '',
<span>19</span>         ],
<span>20</span> <span>    ]
</span><span>21</span> ];

 3. 사용자 모델 생성

appmodels 아래에 UserModel.php 생성

<span>1</span> <?<span>php
</span><span>2</span> 
<span>3</span> <span>class</span> UserModel <span>extends</span><span> \Eloquent {
</span><span>4</span>     <span>protected</span> <span>$table</span> = 'users'<span>;
</span><span>5</span>     <span>protected</span> <span>$primaryKey</span> = 'iAutoID'<span>;
</span><span>6</span>     <span>protected</span> <span>$connection</span> = 'user'<span>;
</span><span>7</span> }

 이러한 User 모델이 성공적으로 생성되었으며 코드도 매우 간단합니다. 멤버 변수의 의미는 누구나 이해할 수 있을 것이라 생각합니다. 테이블 이름, 기본 키, 데이터베이스 연결 식별자(구성 파일 내)를 순서대로 나타냅니다.

5. UserModel 사용

이제 어디서나 사용할 수 있습니다. 컨트롤러와 라우터에서 사용할 수 있습니다. 다음은 간단한 예입니다.

이제 쿼리 문이 있습니다:

<span> 1</span> <span>SELECT</span>
<span> 2</span> <span>    users.sNmame,
</span><span> 3</span> <span>    users.iCreateTime,
</span><span> 4</span> <span>    users_ext.iAge,
</span><span> 5</span> <span>    users_ext.sSex
</span><span> 6</span> <span>FROM</span>
<span> 7</span> <span>    users
</span><span> 8</span> <span>LEFT</span> <span>JOIN</span> users_ext <span>ON</span> users.iAutoId <span>=</span><span> users_ext.iUserID
</span><span> 9</span> <span>WHERE</span>
<span>10</span>     users.iStatus <span>=</span> <span>1</span>
<span>11</span> <span>AND</span> users_ext.sSex <span>=</span> <span>0</span>
<span>12</span> <span>ORDER</span> <span>BY</span>
<span>13</span> <span>    users.iCreateTime
</span><span>14</span> LIMIT <span>0</span><span>,
</span><span>15</span>  <span>1</span>

  다음은 ORM 형식으로 구현되는 간단한 쿼리문입니다.

<span>1</span> <span>public</span> <span>function</span><span> getUsers(){
</span><span>2</span> 
<span>3</span>         <span>$select</span> = 'users.sNmame,users.iCreateTime,users_ext.iAge,users_ext.sSex'<span>;
</span><span>4</span>         <span>$resData</span> = UserModel::selectRaw(<span>$select</span>)->leftJoin('users_ext','users.iAutoId','=','users_ext.iUserID')->where('users.iStatus','=',1)->where('users_ext.sSex','=',0)->skip(0)->limit(1)-><span>get();
</span><span>5</span>         <span>var_dump</span>(<span>$resData</span>-><span>toArray());
</span><span>6</span>         <span>exit</span><span>();
</span><span>7</span> }

 쿼리 결과는 다음과 같습니다.

 

자, 위의 내용은 단순한 쿼리 예시일 뿐, 모듈 간의 연관성 등 아직 공부할 부분이 많습니다.

 

 

 

위 내용은 관련 내용을 포함하여 Eloquent ORM 연구 노트를 소개한 내용입니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.