模型对象的关联属性可以直接作为当前模型对象的动态属性进行赋值或者取值操作(延迟查询),虽然该属性并非数据表字段,例如:

namespace app\index\model;

use think\Model;

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

我们在使用

// 查询模型数据
$user = User::find(1);
// 获取动态属性
dump($user->profile);
// 给关联模型属性赋值
$user->profile->phone = '1234567890';
// 保存关联模型数据
$user->profile->save();

在获取动态属性profile的同时,模型会通过定义的关联方法去查询关联对象的数据并赋值给该动态属性,这是一种关联数据的“惰性加载”,只有真正访问关联属性的时候才会进行关联查询。

当有大量的关联数据需要查询的时候,一般都会考虑选择关联预载入的方式(参考下一节)。