欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

php的db类库Eloquent单独使用系列(11)- 添加模型属性

程序员文章站 2022-03-06 22:25:23
...
我的Eloquent单独使用系列文章
php的db类库Eloquent单独使用系列(1)
php的db类库Eloquent单独使用系列(2) - 分页
php的db类库Eloquent单独使用系列(3) - sql日志
php的db类库Eloquent单独使用系列(4)- 事件监听
php的db类库Eloquent单独使用系列(5)- 模型转数组
php的db类库Eloquent单独使用系列(6)- 一对一关联
php的db类库Eloquent单独使用系列(7)- 一对多关联
php的db类库Eloquent单独使用系列(8)- 多对多关联
php的db类库Eloquent单独使用系列(9)- 多对多关联 - 表关联自身
php的db类库Eloquent单独使用系列(10)- 多对多关联 - 远程一对多
php的db类库Eloquent单独使用系列(11)- 多对多关联 - 添加模型属性
php的db类库Eloquent单独使用系列(12)- 结果集模型转数组 - 2




本系列文章的目的就是脱离laravel环境使用Eloquent,因为它好用
本系列文章所有代码均测试通过。Eloquent版本:5.4.27

本文的目的是模型的额外属性。
首先建表,假设有一个活动表act,每个表有一个地区属性area_id,关联到area表,而area表有一个name字段。

现在我希望活动模型能自动有一个area_name属性


Act.php
<?php
namespace app\model;
use \Illuminate\Database\Eloquent\Model;
/**
 * 活动模型类
 */
class Act extends Model 
{
    protected $table = 'act';
    public $timestamps = false;
    
    protected $appends = ['area_name']; // 这里添加附加属性
    protected $hidden = ['city'];       //如果不这么写,会把city模型加入
    
    // 自定义属性
    // 此方法命名很讲究,下划线转驼峰大小写。
   // 获取属性时,使用$act->area_name
    public function getAreaNameAttribute()
    {
        return $this->city->name;   // name属性是city表里的。
    }
    
    // 这是常规的定义,因为一个城市会关联多个活动    
    public function city()  
    {  
        return $this->belongsTo('app\model\Area', 'area_id', 'id');  
    }  
}


客户端代码
$act  = \app\model\Act:find(1);
echo $act->area_name;