ThinkPHP3.23之關聯模型(一)

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章