## ä¸å¯¹ä¸å
³è
### å
³èå®ä¹
å®ä¹ä¸å¯¹ä¸å
³èï¼ä¾å¦ï¼ä¸ä¸ªç¨æ·é½æä¸ä¸ªä¸ªäººèµæï¼æ们å®ä¹`User`模åå¦ä¸ï¼
~~~
<?php
namespace app\model;
use think\Model;
class User extends Model
{
public function profile()
{
return $this->hasOne(Profile::class);
}
}
~~~
`hasOne`æ¹æ³çåæ°å
æ¬ï¼
>[info] ### hasOne('å
³è模åç±»å', 'å¤é®', '主é®');
é¤äºå
³è模åå¤ï¼å
¶å®åæ°é½æ¯å¯éã
* **å
³è模å**ï¼å¿
é¡»ï¼ï¼å
³è模åç±»å
* **å¤é®**ï¼é»è®¤çå¤é®è§åæ¯å½å模ååï¼ä¸å«å½å空é´ï¼ä¸åï¼+`_id` ï¼ä¾å¦`user_id`
* **主é®**ï¼å½å模å主é®ï¼é»è®¤ä¼èªå¨è·åä¹å¯ä»¥æå®ä¼ å
¥
ä¸å¯¹ä¸å
³èå®ä¹çæ¶åè¿æ¯æé¢å¤çæ¹æ³ï¼å
æ¬ï¼
æ¹æ³å|æè¿°
---|---
bind|ç»å®å
³èå±æ§å°ç¶æ¨¡å
joinType|JOINæ¹å¼æ¥è¯¢çJOINæ¹å¼ï¼é»è®¤ä¸º`INNER`
>[danger] å¦æ使ç¨äºJOINæ¹å¼çå
³èæ¥è¯¢æ¹å¼ï¼ä½ å¯ä»¥å¨é¢å¤çæ¥è¯¢æ¡ä»¶ä¸ä½¿ç¨å
³è对象åï¼ä¸å«å½å空é´ï¼ä½ä¸ºè¡¨çå«åã
### å
³èæ¥è¯¢
å®ä¹å¥½å
³èä¹åï¼å°±å¯ä»¥ä½¿ç¨ä¸é¢çæ¹æ³è·åå
³èæ°æ®ï¼
~~~
$user = User::find(1);
// è¾åºProfileå
³è模åçemailå±æ§
echo $user->profile->email;
~~~
é»è®¤æ
åµä¸ï¼ æ们使ç¨çæ¯`user_id` ä½ä¸ºå¤é®å
³èï¼å¦æä¸æ¯çè¯åéè¦å¨å
³èå®ä¹çæ¶åæå®ï¼ä¾å¦ï¼
~~~
<?php
namespace app\model;
use think\Model;
class User extends Model
{
public function profile()
{
return $this->hasOne(Profile::class, 'uid');
}
}
~~~
>[danger] æä¸ç¹éè¦æ³¨æçæ¯ï¼å
³èæ¹æ³çå½åè§èæ¯é©¼å³°æ³ï¼èå
³èå±æ§åä¸è¬æ¯å°å+ä¸å线çæ¹å¼ï¼ç³»ç»å¨è·åçæ¶åä¼èªå¨è½¬æ¢å¯¹åºï¼è¯»å`user_profile`å
³èå±æ§å对åºçå
³èæ¹æ³åºè¯¥æ¯`userProfile`ã
### æ ¹æ®å
³èæ°æ®æ¥è¯¢
å¯ä»¥æ ¹æ®å
³èæ¡ä»¶æ¥æ¥è¯¢å½å模å对象æ°æ®ï¼ä¾å¦ï¼
~~~
// æ¥è¯¢ç¨æ·æµç§°æ¯thinkçç¨æ·
// 注æ第ä¸ä¸ªåæ°æ¯å
³èæ¹æ³åï¼ä¸æ¯å
³è模ååï¼
$users = User::hasWhere('profile', ['nickname'=>'think'])->select();
// å¯ä»¥ä½¿ç¨éå
æ¥è¯¢
$users = User::hasWhere('profile', function($query) {
$query->where('nickname', 'like', 'think%');
})->select();
~~~
### é¢è½½å
¥æ¥è¯¢
å¯ä»¥ä½¿ç¨é¢è½½å
¥æ¥è¯¢è§£å³å
¸åç`N+1`æ¥è¯¢é®é¢ï¼ä½¿ç¨ï¼
~~~
$users = User::with('profile')->select();
foreach ($users as $user) {
echo $user->profile->name;
}
~~~
ä¸é¢ç代ç 使ç¨çæ¯`IN`æ¥è¯¢ï¼åªä¼äº§ç2æ¡SQLæ¥è¯¢ã
å¦æè¦å¯¹å
³è模åè¿è¡çº¦æï¼å¯ä»¥ä½¿ç¨éå
çæ¹å¼ã
~~~
$users = User::with(['profile' => function($query) {
$query->field('id,user_id,name,email');
}])->select();
foreach ($users as $user) {
echo $user->profile->name;
}
~~~
`with`æ¹æ³å¯ä»¥ä¼ å
¥æ°ç»ï¼è¡¨ç¤ºåæ¶å¯¹å¤ä¸ªå
³è模åï¼æ¯æä¸åçå
³èç±»åï¼è¿è¡é¢è½½å
¥æ¥è¯¢ã
~~~
$users = User::with(['profile','book'])->select();
foreach ($users as $user) {
echo $user->profile->name;
foreach($user->book as $book) {
echo $book->name;
}
}
~~~
å¦æéè¦ä½¿ç¨`JOIN`æ¹å¼çæ¥è¯¢ï¼ç´æ¥ä½¿ç¨`withJoin`æ¹æ³ï¼å¦ä¸ï¼
~~~
$users = User::withJoin('profile')->select();
foreach ($users as $user) {
echo $user->profile->name;
}
~~~
`withJoin`æ¹æ³é»è®¤ä½¿ç¨çæ¯`INNER JOIN`æ¹å¼ï¼å¦æéè¦ä½¿ç¨å
¶å®çï¼å¯ä»¥æ¹æ
~~~
$users = User::withJoin('profile', 'LEFT')->select();
foreach ($users as $user) {
echo $user->profile->name;
}
~~~
éè¦æ³¨æçæ¯`withJoin`æ¹å¼ä¸æ¯æåµå¥å
³èï¼éå¸¸ä½ å¯ä»¥ç´æ¥ä¼ å
¥å¤ä¸ªéè¦å
³èç模åã
å¦æéè¦çº¦æå
³èå段ï¼å¯ä»¥ä½¿ç¨ä¸é¢çç®ä¾¿æ¹æ³ã
~~~
$users = User::withJoin([
'profile' => ['user_id', 'name', 'email']
])->select();
foreach ($users as $user) {
echo $user->profile->name;
}
~~~
### å
³èä¿å
~~~
$user = User::find(1);
// å¦æè¿æ²¡æå
³èæ°æ® åè¿è¡æ°å¢
$user->profile()->save(['email' => 'thinkphp']);
~~~
ç³»ç»ä¼èªå¨æå½å模åç主é®ä¼ å
¥`Profile`模åã
åæ°å¢ä¸æ ·ä½¿ç¨`save`æ¹æ³è¿è¡æ´æ°å
³èæ°æ®ã
~~~
$user = User::find(1);
$user->profile->email = 'thinkphp';
$user->profile->save();
// æè
$user->profile->save(['email' => 'thinkphp']);
~~~
### å®ä¹ç¸å¯¹å
³è
æ们å¯ä»¥å¨`Profile`模åä¸å®ä¹ä¸ä¸ªç¸å¯¹çå
³èå
³ç³»ï¼ä¾å¦ï¼
~~~
<?php
namespace app\model;
use think\Model;
class Profile extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
}
~~~
`belongsTo`çåæ°å
æ¬ï¼
>[info] ### belongsTo('å
³è模å','å¤é®', 'å
³è主é®');
é¤äºå
³è模åå¤ï¼å
¶å®åæ°é½æ¯å¯éã
* **å
³è模å**ï¼å¿
é¡»ï¼ï¼å
³è模åç±»å
* **å¤é®**ï¼å½å模åå¤é®ï¼é»è®¤çå¤é®åè§åæ¯å
³è模åå+`_id`
* **å
³è主é®**ï¼å
³è模å主é®ï¼ä¸è¬ä¼èªå¨è·åä¹å¯ä»¥æå®ä¼ å
¥
é»è®¤çå
³èå¤é®æ¯`user_id`ï¼å¦æä¸æ¯ï¼éè¦å¨ç¬¬äºä¸ªåæ°å®ä¹
~~~
<?php
namespace app\model;
use think\Model;
class Profile extends Model
{
public function user()
{
return $this->belongsTo(User::class, 'uid');
}
}
~~~
æ们就å¯ä»¥æ ¹æ®æ¡£æ¡èµææ¥è·åç¨æ·æ¨¡åçä¿¡æ¯
~~~
$profile = Profile::find(1);
// è¾åºUserå
³è模åçå±æ§
echo $profile->user->account;
~~~
## ç»å®å±æ§å°ç¶æ¨¡å
å¯ä»¥å¨å®ä¹å
³èçæ¶å使ç¨`bind`æ¹æ³ç»å®å±æ§å°ç¶æ¨¡åï¼ä¾å¦ï¼
~~~
<?php
namespace app\model;
use think\Model;
class User extends Model
{
public function profile()
{
return $this->hasOne(Profile::class, 'uid')->bind(['nickname', 'email']);
}
}
~~~
æè
æå®ç»å®å±æ§å«å
~~~
<?php
namespace app\model;
use think\Model;
class User extends Model
{
public function profile()
{
return $this->hasOne(Profile::class, 'uid')->bind([
'email',
'truename' => 'nickname',
]);
}
}
~~~
ç¶å使ç¨å
³èé¢è½½å
¥æ¥è¯¢çæ¶åï¼å¯ä»¥ä½¿ç¨
~~~
$user = User::with('profile')->find(1);
// ç´æ¥è¾åºProfileå
³è模åçç»å®å±æ§
echo $user->email;
echo $user->truename;
~~~
ç»å®å
³è模åçå±æ§æ¯æ读åå¨ã
> å¦æä¸æ¯é¢è½½å
¥æ¥è¯¢ï¼è¯·ä½¿ç¨æ¨¡åç`appendRelationAttr`æ¹æ³è¿½å å±æ§ã
ä¹å¯ä»¥ä½¿ç¨å¨æç»å®å
³èå±æ§ï¼å¯ä»¥ä½¿ç¨
~~~
$user = User::find(1)->bindAttr('profile',['email','nickname']);
// è¾åºProfileå
³è模åçemailå±æ§
echo $user->email;
echo $user->nickname;
~~~
åæ ·æ¯ææå®å±æ§å«å
~~~
$user = User::find(1)->bindAttr('profile',[
'email',
'truename' => 'nickname',
]);
// è¾åºProfileå
³è模åçemailå±æ§
echo $user->email;
echo $user->truename;
~~~
## å
³èèªå¨åå
¥
æ们å¯ä»¥ä½¿ç¨`together`æ¹æ³æ´æ¹ä¾¿çè¿è¡å
³èèªå¨åå
¥æä½ã
åå
¥
~~~php
$blog = new Blog;
$blog->name = 'thinkphp';
$blog->title = 'ThinkPHP5å
³èå®ä¾';
$content = new Content;
$content->data = 'å®ä¾å
容';
$blog->content = $content;
$blog->together(['content'])->save();
~~~
å¦æç»å®äºå模åçå±æ§å°å½å模åï¼å¯ä»¥æå®å模åçå±æ§
~~~php
$blog = new Blog;
$blog->name = 'thinkphp';
$blog->title = 'ThinkPHP5å
³èå®ä¾';
$blog->content = 'å®ä¾å
容';
// titleåcontentæ¯å模åçå±æ§
$blog->together(['content' => ['title', 'content']])->save();
~~~
æ´æ°
~~~php
// æ¥è¯¢
$blog = Blog::find(1);
$blog->title = 'æ´æ¹æ é¢';
$blog->content->data = 'æ´æ°å
容';
// æ´æ°å½å模ååå
³è模å
$blog->together(['content'])->save();
~~~
å é¤
~~~
// æ¥è¯¢
$blog = Blog::with('content')->find(1);
// å é¤å½ååå
³è模å
$blog->together(['content'])->delete();
~~~
- åºè¨
- åºç¡
- å®è£
- å¼åè§è
- ç®å½ç»æ
- é ç½®
- æ¶æ
- 请æ±æµç¨
- æ¶ææ»è§
- å ¥å£æ件
- å¤åºç¨æ¨¡å¼
- 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
- éå½
- å©æå½æ°
- å级æ导
- æ´æ°æ¥å¿