模型對象的關(guān)聯(lián)屬性可以直接作為當前模型對象的動態(tài)屬性進行賦值或者取值操作(延遲查詢),雖然該屬性并非數(shù)據(jù)表字段,例如:

<?php
namespace app\index\model;

use think\Model;

class User extends Model
{
    public function profile()
    {
        return $this->hasOne('Profile');
    }
}

我們在使用

// 查詢模型數(shù)據(jù)
$user = User::find(1);
// 獲取動態(tài)屬性
dump($user->profile);
// 給關(guān)聯(lián)模型屬性賦值
$user->profile->phone = '1234567890';
// 保存關(guān)聯(lián)模型數(shù)據(jù)
$user->profile->save();

在獲取動態(tài)屬性profile的同時,模型會通過定義的關(guān)聯(lián)方法去查詢關(guān)聯(lián)對象的數(shù)據(jù)并賦值給該動態(tài)屬性,這是一種關(guān)聯(lián)數(shù)據(jù)的“惰性加載”,只有真正訪問關(guān)聯(lián)屬性的時候才會進行關(guān)聯(lián)查詢。

當有大量的關(guān)聯(lián)數(shù)據(jù)需要查詢的時候,一般都會考慮選擇關(guān)聯(lián)預(yù)載入的方式(參考下一節(jié))。