YII2数据库查询实践
<p>初探yii2框架,对增删改查,关联查询等数据库基本操作的简单实践。</p>
<p>
数据库配置。</p>
<p>
/config/db.php 进行数据库配置</p>
<p>
实践过程中有个test库-》test表-》两条记录如下</p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_673110">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql plain">mysql> </code><code class="sql keyword">select</code> <code class="sql plain">* </code><code class="sql keyword">from</code> <code class="sql plain">test;</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql plain">+</code><code class="sql comments">----+--------+</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql plain">| id | </code><code class="sql keyword">name</code> <code class="sql plain">|</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql plain">+</code><code class="sql comments">----+--------+</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql plain">| 1 | zhuai |</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql plain">| 2 | heng | </code>
</div>
<div class="line number7 index6 alt2">
<code class="sql plain">+</code><code class="sql comments">----+--------+</code>
</div>
<div class="line number8 index7 alt1">
<code class="sql plain">18 </code><code class="sql keyword">rows</code> <code class="sql color1">in</code> <code class="sql keyword">set</code> <code class="sql plain">(0.00 sec)</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<br><div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<strong>sql 查询方式</strong></p>
<p>
yii2 提供了原始的数据库查询方式findBySql;同时, 通过占位符的方式,自动进行了基本的sql注入防御 。上码</p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_166298">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql plain">// 最基本的查询方式</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql plain">$sql = </code><code class="sql string">"select * from test where 1"</code><code class="sql plain">;</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql plain">$res = Test::findBySql($sql)-></code><code class="sql color1">all</code><code class="sql plain">();</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql plain">var_dump(</code><code class="sql color2">count</code><code class="sql plain">($res)); // res->2 </code>
</div>
<div class="line number5 index4 alt2">
<code class="sql plain">// findbysql 防止sql注入方式</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql plain">$id = </code><code class="sql string">'1 or 1=1'</code><code class="sql plain">;</code>
</div>
<div class="line number7 index6 alt2">
<code class="sql plain">$sql = </code><code class="sql string">"select * from test where id = "</code> <code class="sql plain">. $id;</code>
</div>
<div class="line number8 index7 alt1">
<code class="sql plain">$res = Test::findBySql($sql)-></code><code class="sql color1">all</code><code class="sql plain">();</code>
</div>
<div class="line number9 index8 alt2">
<code class="sql plain">var_dump(</code><code class="sql color2">count</code><code class="sql plain">($res)); // res-> 2</code>
</div>
<div class="line number10 index9 alt1">
<code class="sql plain">$sql = </code><code class="sql string">"select * from test where id = :id"</code><code class="sql plain">;</code>
</div>
<div class="line number11 index10 alt2">
<code class="sql plain">// 定位符会自动防止sql 注入</code>
</div>
<div class="line number12 index11 alt1">
<code class="sql plain">$res = Test::findBySql($sql,array(</code><code class="sql string">":id"</code><code class="sql plain">=>$id))-></code><code class="sql color1">all</code><code class="sql plain">();</code>
</div>
<div class="line number13 index12 alt2">
<code class="sql plain">var_dump(</code><code class="sql color2">count</code><code class="sql plain">($res)); // res->1</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<strong>activeRecord查询方式</strong></p>
<p>
每个框架除了原有的sql方式,都会提供相应的封装的查询方式,yii2亦然。</p>
<p>
<strong>创建model</strong></p>
<p>
yii的model基本方式如下,代码如下不赘述。</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterphp" id="highlighter_476029">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="php plain"><?php</code>
</div>
<div class="line number2 index1 alt1">
<code class="php keyword">namespace</code> <code class="php plain">app\models;</code>
</div>
<div class="line number3 index2 alt2">
<code class="php keyword">use</code> <code class="php plain">Yii;</code>
</div>
<div class="line number4 index3 alt1">
<code class="php keyword">use</code> <code class="php plain">yii\db\ActiveRecord;</code>
</div>
<div class="line number5 index4 alt2">
<code class="php keyword">class</code> <code class="php plain">Test </code><code class="php keyword">extends</code> <code class="php plain">ActiveRecord</code>
</div>
<div class="line number6 index5 alt1">
<code class="php plain">{</code>
</div>
<div class="line number7 index6 alt2">
<code class="php comments">// 可无,对应表:默认类名和表名匹配,则无需此函数</code>
</div>
<div class="line number8 index7 alt1">
<code class="php keyword">public</code> <code class="php keyword">static</code> <code class="php keyword">function</code> <code class="php plain">tableName()</code>
</div>
<div class="line number9 index8 alt2">
<code class="php plain">{</code>
</div>
<div class="line number10 index9 alt1">
<code class="php keyword">return</code> <code class="php string">'test'</code><code class="php plain">;</code>
</div>
<div class="line number11 index10 alt2">
<code class="php plain">}</code>
</div>
<div class="line number12 index11 alt1">
<code class="php comments">// 可无,验证器:主要用于校验各个字段</code>
</div>
<div class="line number13 index12 alt2">
<code class="php keyword">public</code> <code class="php keyword">function</code> <code class="php plain">rules(){</code>
</div>
<div class="line number14 index13 alt1">
<code class="php keyword">return</code> <code class="php plain">[</code>
</div>
<div class="line number15 index14 alt2">
<code class="php plain">[</code><code class="php string">'id'</code><code class="php plain">, </code><code class="php string">'integer'</code><code class="php plain">],</code>
</div>
<div class="line number16 index15 alt1">
<code class="php plain">[</code><code class="php string">'name'</code><code class="php plain">, </code><code class="php string">'string'</code><code class="php plain">, </code><code class="php string">'length'</code> <code class="php plain">=> ],</code>
</div>
<div class="line number17 index16 alt2">
<code class="php plain">];</code>
</div>
<div class="line number18 index17 alt1">
<code class="php plain">}</code>
</div>
<div class="line number19 index18 alt2">
<code class="php plain">}</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<strong>使用的时候需要引入model</strong></p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_928931">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql plain">use app\models\Test;</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql plain">增加操作</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql plain">// </code><code class="sql keyword">add</code> <code class="sql plain">操作</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql plain">$test = new Test();</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql plain">$test-></code><code class="sql keyword">name</code> <code class="sql plain">= </code><code class="sql string">'test'</code><code class="sql plain">;</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql plain">// 合法性校验</code>
</div>
<div class="line number7 index6 alt2">
<code class="sql plain">$test->validate();</code>
</div>
<div class="line number8 index7 alt1">
<code class="sql plain">if($test->hasErrors()){</code>
</div>
<div class="line number9 index8 alt2">
<code class="sql plain">echo </code><code class="sql string">"数据不合法"</code><code class="sql plain">;</code>
</div>
<div class="line number10 index9 alt1">
<code class="sql plain">die;</code>
</div>
<div class="line number11 index10 alt2">
<code class="sql plain">}</code>
</div>
<div class="line number12 index11 alt1">
<code class="sql plain">$test->save();</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<strong>查询操作</strong></p>
<p>
查询操作先上官方文档</p>
<p>
activeRecord doc</p>
<p>
where doc</p>
<p>
需要强调的是:yii查询提供了特别多丰富的库,例如代码中的批量查询处理等等,细节可以看文档。</p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_59077">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql plain">// </code><code class="sql keyword">select</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql plain">// id = 1</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql plain">$res = Test::find()-></code><code class="sql keyword">where</code><code class="sql plain">([</code><code class="sql string">'id'</code> <code class="sql plain">=> 1])-></code><code class="sql color1">all</code><code class="sql plain">();</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql plain">var_dump(</code><code class="sql color2">count</code><code class="sql plain">($res)); //1</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql plain">// id > 0</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql plain">$res = Test::find()-></code><code class="sql keyword">where</code><code class="sql plain">([</code><code class="sql string">'>'</code><code class="sql plain">,</code><code class="sql string">'id'</code><code class="sql plain">,0])-></code><code class="sql color1">all</code><code class="sql plain">();</code>
</div>
<div class="line number7 index6 alt2">
<code class="sql plain">var_dump(</code><code class="sql color2">count</code><code class="sql plain">($res)); //2</code>
</div>
<div class="line number8 index7 alt1">
<code class="sql plain">// id > =1 id <=2</code>
</div>
<div class="line number9 index8 alt2">
<code class="sql plain">$res = Test::find()-></code><code class="sql keyword">where</code><code class="sql plain">([</code><code class="sql string">'between'</code><code class="sql plain">,</code><code class="sql string">'id'</code><code class="sql plain">,1,2])-></code><code class="sql color1">all</code><code class="sql plain">();</code>
</div>
<div class="line number10 index9 alt1">
<code class="sql plain">var_dump(</code><code class="sql color2">count</code><code class="sql plain">($res)); //2</code>
</div>
<div class="line number11 index10 alt2">
<code class="sql plain">// </code><code class="sql keyword">name</code><code class="sql plain">字段</code><code class="sql color1">like</code>
</div>
<div class="line number12 index11 alt1">
<code class="sql plain">$res = Test::find()-></code><code class="sql keyword">where</code><code class="sql plain">([</code><code class="sql string">'like'</code><code class="sql plain">, </code><code class="sql string">'name'</code><code class="sql plain">, </code><code class="sql string">'cuihuan'</code><code class="sql plain">])-></code><code class="sql color1">all</code><code class="sql plain">();</code>
</div>
<div class="line number13 index12 alt2">
<code class="sql plain">var_dump(</code><code class="sql color2">count</code><code class="sql plain">($res)); //2</code>
</div>
<div class="line number14 index13 alt1">
<code class="sql plain">// 查询的使用 obj->array</code>
</div>
<div class="line number15 index14 alt2">
<code class="sql plain">$res = Test::find()-></code><code class="sql keyword">where</code><code class="sql plain">([</code><code class="sql string">'between'</code><code class="sql plain">,</code><code class="sql string">'id'</code><code class="sql plain">,1,2])->asArray()-></code><code class="sql color1">all</code><code class="sql plain">();</code>
</div>
<div class="line number16 index15 alt1">
<code class="sql plain">var_dump($res[</code><code class="sql string">'id'</code><code class="sql plain">]); //2</code>
</div>
<div class="line number17 index16 alt2">
<code class="sql plain">// 批量查询,对于大内存操作的批量查询</code>
</div>
<div class="line number18 index17 alt1">
<code class="sql plain">foreach (Test::find()->batch(1) </code><code class="sql keyword">as</code> <code class="sql plain">$test) {</code>
</div>
<div class="line number19 index18 alt2">
<code class="sql plain">var_dump(</code><code class="sql color2">count</code><code class="sql plain">($test));</code>
</div>
<div class="line number20 index19 alt1">
<code class="sql plain">}</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<strong>删除操作</strong></p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_252069">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql plain">// </code><code class="sql keyword">delete</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql plain">// 选出来删除</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql plain">$res = Test::find()-></code><code class="sql keyword">where</code><code class="sql plain">([</code><code class="sql string">'id'</code><code class="sql plain">=>1])-></code><code class="sql color1">all</code><code class="sql plain">();</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql plain">$res-></code><code class="sql keyword">delete</code><code class="sql plain">();</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql plain">// 直接删除</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql plain">var_dump(Test::deleteAll(</code><code class="sql string">'id>:id'</code><code class="sql plain">, array(</code><code class="sql string">':id'</code> <code class="sql plain">=> 2)));</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<strong>修改操作</strong></p>
<p>
除了代码中方式,yii2直接提供update操作。</p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_700469">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql plain">// 活动记录修改</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql plain">$res = Test::find()-></code><code class="sql keyword">where</code><code class="sql plain">([</code><code class="sql string">'id'</code><code class="sql plain">=>4])->one();</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql plain">$res-></code><code class="sql keyword">name</code> <code class="sql plain">= </code><code class="sql string">"update"</code><code class="sql plain">;</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql plain">$res->save();</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<strong>关联查询操作</strong></p>
<p>
关联查询示例中两个表:</p>
<p>
一个学生表(student):id ,name;</p>
<p>
一个分数表(score):id,stu_id,score</p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_937812">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql plain">// 相应学生的所有score</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql plain">$stu = Student::find()-></code><code class="sql keyword">where</code><code class="sql plain">([</code><code class="sql string">'name'</code><code class="sql plain">=></code><code class="sql string">'xiaozhuai'</code><code class="sql plain">])->one();</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql plain">var_dump($stu->id);</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql plain">// 基本获取</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql plain">$scores_1 = $stu->hasMany(</code><code class="sql string">'app\model\Score'</code><code class="sql plain">,[</code><code class="sql string">'stu_id'</code><code class="sql plain">=>$stu->id])->asArray()-></code><code class="sql color1">all</code><code class="sql plain">();</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql plain">$scores_2 = $stu->hasMany(Score::className(),[</code><code class="sql string">'stu_id'</code><code class="sql plain">=></code><code class="sql string">'id'</code><code class="sql plain">])->asArray()-></code><code class="sql color1">all</code><code class="sql plain">();</code>
</div>
<div class="line number7 index6 alt2">
<code class="sql plain">var_dump($scores_1);</code>
</div>
<div class="line number8 index7 alt1">
<code class="sql plain">var_dump($scores_2);</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
两种关联查询方式;但是,在controller进行相关操作,代码显的过于混乱,在model中封装调用</p>
<p>
首先在student model中封装相关关联调用函数</p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_238812">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql plain"><?php</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql plain">namespace app\models;</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql plain">use Yii;</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql plain">use yii\db\ActiveRecord;</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql plain">class Student extends ActiveRecord</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql plain">{</code>
</div>
<div class="line number7 index6 alt2">
<code class="sql keyword">public</code> <code class="sql keyword">static</code> <code class="sql keyword">function</code> <code class="sql plain">tableName()</code>
</div>
<div class="line number8 index7 alt1">
<code class="sql plain">{</code>
</div>
<div class="line number9 index8 alt2">
<code class="sql keyword">return</code> <code class="sql string">'student'</code><code class="sql plain">;</code>
</div>
<div class="line number10 index9 alt1">
<code class="sql plain">}</code>
</div>
<div class="line number11 index10 alt2">
<code class="sql plain">// 获取分数信息</code>
</div>
<div class="line number12 index11 alt1">
<code class="sql keyword">public</code> <code class="sql keyword">function</code> <code class="sql plain">getScores()</code>
</div>
<div class="line number13 index12 alt2">
<code class="sql plain">{</code>
</div>
<div class="line number14 index13 alt1">
<code class="sql plain">$scores = $this->hasMany(Score::className(), [</code><code class="sql string">'stu_id'</code> <code class="sql plain">=> </code><code class="sql string">'id'</code><code class="sql plain">])->asArray()-></code><code class="sql color1">all</code><code class="sql plain">();</code>
</div>
<div class="line number15 index14 alt2">
<code class="sql keyword">return</code> <code class="sql plain">$scores;</code>
</div>
<div class="line number16 index15 alt1">
<code class="sql plain">}</code>
</div>
<div class="line number17 index16 alt2">
<code class="sql plain">}</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
之后直接调用,两种调用方式</p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_6332">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql plain">// 函数封装之后调用</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql plain">$scores = $stu->getScores();</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql plain">var_dump($scores);</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql plain">// 利用__get 的自动调用的方式</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql plain">$scores = $stu->scores;</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql plain">var_dump($scores);</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<strong>最后</strong></p>
<p>
上面在yii2的部署和使用过程中的一些基本的增删改查,关联查询等操作。</p>
頁:
[1]