## 模åå
³è
éè¿æ¨¡åå
³èæä½ææ°æ®è¡¨çå
³èå
³ç³»å¯¹è±¡åï¼è§£å³äºå¤§é¨å常ç¨çå
³èåºæ¯ï¼å°è£
çå
³èæä½æ¯èµ·å¸¸è§çæ°æ®åºè表æä½æ´å æºè½åé«æï¼å¹¶ä¸ç´è§ã
>[danger] é¿å
å¨æ¨¡åå
é¨ä½¿ç¨å¤æç`join`æ¥è¯¢åè§å¾æ¥è¯¢ã
ä»é¢å对象çè§åº¦æ¥çå
³èçè¯ï¼æ¨¡åçå
³èå
¶å®åºè¯¥æ¯æ¨¡åçæ个å±æ§ï¼æ¯å¦ç¨æ·çæ¡£æ¡å
³èï¼å°±åºè¯¥æ¯ä¸é¢çæ
åµï¼
~~~
// è·åç¨æ·æ¨¡åå®ä¾
$user = User::find(1);
// è·åç¨æ·çæ¡£æ¡
$user->profile;
// è·åç¨æ·çæ¡£æ¡ä¸çææºèµæ
$user->profile->mobile;
~~~
为äºæ´æ¹ä¾¿åçµæ´»çå®ä¹æ¨¡åçå
³èå
³ç³»ï¼æ¡æ¶éæ©äºæ¹æ³å®ä¹èä¸æ¯å±æ§å®ä¹çæ¹å¼ï¼æ¯ä¸ª**å
³èå±æ§**å
¶å®æ¯å¯¹åºäºä¸ä¸ªæ¨¡åçï¼å
³èï¼æ¹æ³ï¼è¿ä¸ªå
³èå±æ§å模åçæ°æ®ä¸æ ·æ¯å¨æçï¼å¹¶é模åç±»çå®ä½å±æ§ã
ä¾å¦ä¸é¢çå
³èå±æ§å°±æ¯å¨`User`模åç±»ä¸å®ä¹äºä¸ä¸ª`profile`æ¹æ³ï¼`mobile`å±æ§æ¯`Profile`模åçå±æ§ï¼ï¼
~~~
<?php
namespace app\model;
use think\Model;
class User extends Model
{
public function profile()
{
return $this->hasOne(Profile::class);
}
}
~~~
>[danger] ä¸ä¸ªæ¨¡åå¯ä»¥å®ä¹å¤ä¸ªä¸åçå
³èï¼å¢å ä¸åçå
³èæ¹æ³å³å¯
åæ¶ï¼æ们å¿
é¡»å®ä¹ä¸ä¸ª`Profile`模åï¼å³ä½¿æ¯ä¸ä¸ªç©ºæ¨¡åï¼ã
~~~
<?php
namespace app\model;
use think\Model;
class Profile extends Model
{
}
~~~
å
³èæ¹æ³è¿åçæ¯ä¸åçå
³è对象ï¼ä¾å¦è¿éç`profile`æ¹æ³è¿åçæ¯ä¸ä¸ª`HasOne`å
³è对象ï¼`think\model\relation\HasOne`ï¼å®ä¾ã
å½æ们访é®`User`模å对象å®ä¾ç`profile`å±æ§çæ¶åï¼å
¶å®å°±æ¯è°ç¨äº`profile`æ¹æ³æ¥å®æå
³èæ¥è¯¢ã
æç
§`PSR-2`è§èï¼æ¨¡åçæ¹æ³åé½æ¯é©¼å³°å½åçï¼æ以系ç»åäºä¸ä¸ªå
¼å®¹å¤çï¼å¦ææ们å®ä¹äºä¸ä¸ª`userProfile`çå
³èæ¹æ³çæ¶åï¼å¨è·åå
³èå±æ§çæ¶åï¼ä¸é¢ä¸¤ç§æ¹å¼é½æ¯ææçï¼
~~~
$user->userProfile;
$user->user_profile; // 建议使ç¨
~~~
>[danger] æ¨èå
³èå±æ§ç»ä¸ä½¿ç¨åè
ï¼åæ°æ®è¡¨çå段å½åè§èä¸è´ï¼å æ¤å¨å¾å¤æ¶åç³»ç»èªå¨è·åå
³èå±æ§çæ¶åéç¨çä¹æ¯åè
ã
å¯ä»¥ç®åçç解为å
³èå®ä¹å°±æ¯å¨æ¨¡åç±»ä¸æ·»å ä¸ä¸ªæ¹æ³ï¼æ³¨æä¸è¦å模åç对象å±æ§ä»¥åå
¶å®ä¸å¡é»è¾æ¹æ³å²çªï¼ï¼ä¸è¬æ
åµä¸æ éä»»ä½åæ°ï¼å¹¶å¨æ¹æ³ä¸æå®ä¸ç§å
³èå
³ç³»ï¼æ¯å¦ä¸é¢ç`hasOne`å
³èå
³ç³»ï¼`6.0`çæ¬æ¯æçå
³èå
³ç³»å
æ¬ä¸é¢8ç§ï¼åé¢ä¼ç»å¤§å®¶éç»ä»ç»ï¼
|模åæ¹æ³|å
³èç±»å|
|---|---|
|`hasOne`|ä¸å¯¹ä¸|
|`belongsTo`|ä¸å¯¹ä¸|
|`hasMany`|ä¸å¯¹å¤ |
|`hasOneThrough`|è¿ç¨ä¸å¯¹ä¸ |
|`hasManyThrough`|è¿ç¨ä¸å¯¹å¤ |
|`belongsToMany`|å¤å¯¹å¤ |
|`morphMany`|å¤æä¸å¯¹å¤ |
|`morphOne`|å¤æä¸å¯¹ä¸ |
|`morphTo`|å¤æ |
å
³èæ¹æ³ç第ä¸ä¸ªåæ°å°±æ¯è¦å
³èç模åå称ï¼ä¹å°±æ¯è¯´å½å模åçå
³è模åå¿
é¡»ä¹æ¯å·²ç»å®ä¹å¥½çä¸ä¸ªæ¨¡åã
ä¹å¯ä»¥ä½¿ç¨å®æ´å½å空é´å®ä¹ï¼ä¾å¦ï¼
~~~
<?php
namespace app\model;
use think\Model;
class User extends Model
{
public function profile()
{
return $this->hasOne(Profile::class);
}
}
~~~
两个模åä¹é´å 为åç
§æ¨¡åçä¸åå°±ä¼äº§çç¸å¯¹çä½ä¸ä¸å®ç¸åçå
³èå
³ç³»ï¼å¹¶ä¸ç¸å¯¹çå
³èå
³ç³»åªæå¨éè¦è°ç¨çæ¶åæéè¦å®ä¹ï¼ä¸é¢æ¯æ¯ä¸ªå
³èç±»åçç¸å¯¹å
³èå
³ç³»å¯¹ç
§ï¼
|ç±»å|å
³èå
³ç³»|ç¸å¯¹çå
³èå
³ç³»|
|---|---|---|
|ä¸å¯¹ä¸|`hasOne`|`belongsTo`|
|ä¸å¯¹å¤|`hasMany`|`belongsTo`|
|å¤å¯¹å¤|`belongsToMany`|`belongsToMany`|
|è¿ç¨ä¸å¯¹å¤|`hasManyThrough`|ä¸æ¯æ|
|å¤æä¸å¯¹ä¸|`morphOne`|`morphTo`|
|å¤æä¸å¯¹å¤|`morphMany`|`morphTo`|
ä¾å¦ï¼`Profile`模åä¸å°±å¯ä»¥å®ä¹ä¸ä¸ªç¸å¯¹çå
³èå
³ç³»ã
~~~
<?php
namespace app\model;
use think\Model;
class Profile extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
}
~~~
å¨è¿è¡å
³èæ¥è¯¢çæ¶åï¼ä¹æ¯ç±»ä¼¼ï¼åªæ¯å½å模åä¸åã
~~~
// è·åæ¡£æ¡å®ä¾
$profile = Profile::find(1);
// è·åæ¡£æ¡æå±çç¨æ·å称
echo $profile->user->name;
~~~
å¦ææ¯æ°æ®éæ¥è¯¢çè¯ï¼å
³èè·åçç¨æ³å¦ä¸ï¼
~~~
// è·åæ¡£æ¡å®ä¾
$profiles = Profile::where('id', '>', 1)->select();
foreach($profiles as $profile) {
// è·åæ¡£æ¡æå±çç¨æ·å称
echo $profile->user->name;
}
~~~
å¦æä½ éè¦å¯¹å
³è模åè¿è¡æ´å¤çæ¥è¯¢çº¦æï¼å¯ä»¥å¨å
³èæ¹æ³çå®ä¹æ¹æ³åé¢è¿½å é¢å¤çæ¥è¯¢é¾å¼æ¹æ³ï¼ä½åå¿ä¸è¦æ»¥ç¨ï¼å¹¶ä¸ä¸è¦ä½¿ç¨å®é
çæ¥è¯¢æ¹æ³ï¼ï¼ä¾å¦ï¼
~~~
<?php
namespace app\model;
use think\Model;
class User extends Model
{
public function book()
{
return $this->hasMany(Book::class)->order('pub_time');
}
}
~~~
>[danger] 模åå
³èæ¯æè°ç¨æ¨¡åçæ¹æ³
>[info] å
·ä½ä¸åçå
³èå
³ç³»ç详ç»ä½¿ç¨ï¼è¯·ç»§ç»åèåé¢çå
容ã
- åºè¨
- åºç¡
- å®è£
- å¼åè§è
- ç®å½ç»æ
- é ç½®
- æ¶æ
- 请æ±æµç¨
- æ¶ææ»è§
- å ¥å£æ件
- å¤åºç¨æ¨¡å¼
- URL访é®
- 容å¨åä¾èµæ³¨å ¥
- æå¡
- é¨é¢
- ä¸é´ä»¶
- äºä»¶
- è·¯ç±
- è·¯ç±å®ä¹
- åéè§å
- è·¯ç±å°å
- è·¯ç±åæ°
- è·¯ç±ä¸é´ä»¶
- è·¯ç±åç»
- èµæºè·¯ç±
- 注解路ç±
- è·¯ç±ç»å®
- ååè·¯ç±
- MISSè·¯ç±
- è·¨å请æ±
- URLçæ
- æ§å¶å¨
- æ§å¶å¨å®ä¹
- åºç¡æ§å¶å¨
- 空æ§å¶å¨
- èµæºæ§å¶å¨
- æ§å¶å¨ä¸é´ä»¶
- 请æ±
- 请æ±å¯¹è±¡
- 请æ±ä¿¡æ¯
- è¾å ¥åé
- 请æ±ç±»å
- HTTP头信æ¯
- 伪éæ
- åæ°ç»å®
- 请æ±ç¼å
- ååº
- ååºè¾åº
- ååºåæ°
- éå®å
- æ件ä¸è½½
- æ°æ®åº
- è¿æ¥æ°æ®åº
- åå¸å¼æ°æ®åº
- æ¥è¯¢æé å¨
- æ¥è¯¢æ°æ®
- æ·»å æ°æ®
- æ´æ°æ°æ®
- å é¤æ°æ®
- æ¥è¯¢è¡¨è¾¾å¼
- é¾å¼æä½
- where
- table
- alias
- field
- strict
- limit
- page
- order
- group
- having
- join
- union
- distinct
- lock
- cache
- comment
- fetchSql
- force
- partition
- failException
- sequence
- replace
- extra
- duplicate
- procedure
- èåæ¥è¯¢
- å页æ¥è¯¢
- æ¶é´æ¥è¯¢
- é«çº§æ¥è¯¢
- è§å¾æ¥è¯¢
- JSONå段
- åæ¥è¯¢
- åçæ¥è¯¢
- æ¥è¯¢äºä»¶
- è·åå¨
- äºå¡æä½
- åå¨è¿ç¨
- æ°æ®é
- æ°æ®åºé©±å¨
- 模å
- å®ä¹
- 模åå段
- æ°å¢
- æ´æ°
- å é¤
- æ¥è¯¢
- æ¥è¯¢èå´
- JSONå段
- è·åå¨
- ä¿®æ¹å¨
- æç´¢å¨
- æ°æ®é
- èªå¨æ¶é´æ³
- åªè¯»å段
- 软å é¤
- ç±»å转æ¢
- 模åè¾åº
- 模åäºä»¶
- 模åå ³è
- ä¸å¯¹ä¸å ³è
- ä¸å¯¹å¤å ³è
- è¿ç¨ä¸å¯¹å¤
- è¿ç¨ä¸å¯¹ä¸
- å¤å¯¹å¤å ³è
- å¤æå ³è
- å ³èé¢è½½å ¥
- å ³èç»è®¡
- å ³èè¾åº
- è§å¾
- 模æ¿åé
- è§å¾è¿æ»¤
- 模æ¿æ¸²æ
- 模æ¿å¼æ
- è§å¾é©±å¨
- é误åæ¥å¿
- å¼å¸¸å¤ç
- æ¥å¿å¤ç
- è°è¯
- è°è¯æ¨¡å¼
- Traceè°è¯
- SQLè°è¯
- åéè°è¯
- è¿ç¨è°è¯
- éªè¯
- éªè¯å¨
- éªè¯è§å
- é误信æ¯
- éªè¯åºæ¯
- è·¯ç±éªè¯
- å ç½®è§å
- 表å令ç
- 注解éªè¯
- æ项
- ç¼å
- Session
- Cookie
- å¤è¯è¨
- ä¸ä¼
- å½ä»¤è¡
- å¯å¨å ç½®æå¡å¨
- æ¥ççæ¬
- èªå¨çæåºç¨ç®å½
- å建类åºæ件
- æ¸ é¤ç¼åæ件
- çææ°æ®è¡¨å段ç¼å
- çæè·¯ç±æ å°ç¼å
- è¾åºè·¯ç±å®ä¹
- èªå®ä¹æ令
- æ©å±åº
- æ°æ®åºè¿ç§»å·¥å ·
- Workerman
- thinkå©æå·¥å ·åº
- éªè¯ç
- Swoole
- éå½
- å©æå½æ°
- å级æ导
- æ´æ°æ¥å¿