ThinkPHP3.23的關聯模型是很好用的技巧,使用它能使你的代碼更加精簡,它包括三種關聯關係:一對一(HAS_ONE,BELONGS_TO),一對多(HAS_MANY),多對多(HAS_TO_MANY)。
這裏講解第一種“一對一”的關聯模型,其分爲兩種。
1,HAS_ONE
HAS_ONE關聯表示當前模型擁有一個子對象,例如,每個員工都有一個對應的人事檔案,每篇小說文章都有一個對應的書名。我們可以建立一個文章模型BookArticleModel,並且添加如下關聯定義:
<?php
namespace Admin\Model;
use Think\Model\RelationModel;
/**
* 文章模型
*/
class BookArticleModel extends RelationModel
{
public $_link = array(
'book_id' => array(
'mapping_type' => self::BELONGS_TO,// 關聯類型
'class_name' => 'Book',// 關聯數據表
'foreign_key' => 'book_id', //關聯外鍵名
'mapping_fields' => 'book_id,title', // 需要查詢的關聯字段名稱
)
);
然後在寫文章控制器ArticleController
<?php
namespace Admin\Controller;
/**
* 文章管理
*/
class ArticleController extends CommonController
{
// 文章列表
public function index(){
$res = D('BookArticle');
$data = $res->relation('book_id')->Select();// 只關聯一個表用具體字段relation('book_id')
dump($data); exit();
}
}
視圖顯示效果爲
array(7) {
[0] => array(7) {
["article_id"] => string(1) "1"
["book_id"] => array(2) {
["book_id"] => string(1) "1"
["title"] => string(12) "超品巫師"
}
["title"] => string(26) "第一章 我不是道士"
["addtime"] => string(10) "1546260252"
["edittime"] => string(10) "1549984633"
["status"] => string(1) "0"
["count"] => string(4) "7174"
}
....
2,BELONGS_TO
Belongs_to 關聯表示當前模型從屬於另外一個父對象,例如每個用戶都屬於一個部門,每篇小說文章都屬於一本小說。用法和效果同上,我們只需更改如下模型中的關聯定義。
'book_id' => self::BELONGS_TO