前面的几篇文章
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)- 多对多关联 -
远程一对多
本系列文章的目的就是脱离laravel环境使用Eloquent,因为它
好用。
本系列文章所有代码均测试通过。Eloquent
版本:5.4.27
本文的目的是模型的额外属性。
首先建表,假设有一个活动表act,每个表有一个地区属性area_id,关联到area表,而area表有一个name字段。
现在我希望活动模型能自动有一个area_name属性
则
Act.php
class="php" name="code">
<?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;