think php 数据库命名,命名 · ThinkPHP5+数据库和模型 · 看云

模型定义有几个要素:

1. 通常会继承think\Model(或者子类),虚拟模型除外;

2. 一个模型并不总是对应一个数据表(可能会有多个),虽然默认如此;

3. 模型名和数据表名也不是直接对应关系;

4. 尽管一个空模型和使用Db类无异,但意义不同;

模型定义阶段要达成的目的:

1. 定义数据表(默认就是模型类名)

2. 定义数据表主键(默认会自动获取)

3. 定义数据库连接(默认使用数据库配置)

4. 定义数据处理逻辑(包括属性和方法)

5. 定义业务逻辑(方法)

下面的定义是不需要或者不支持的:

1. 数据表字段(不需要,会自动获取,并支持缓存机制)

2. 数据表前缀(不支持,模型不关心前缀)

大多数情况下,数据表和数据库连接是不需要定义的,**数据处理逻辑和业务逻辑才是模型定义的重点**,如果你发现你的大多数模型类都是什么都没定义,那么就要思考下哪里出问题了,为什么你的模型成了形式和摆设。是没业务需要还是职责分工有问题了?也许你在控制器中大量使用Db类进行业务逻辑处理。无论怎样,现在纠正思维,跟着教程拥抱和学习模型吧。

一个模型并不总是对应一个数据表(例如关联模型和聚合模型),但大多数情况下对应的是一个数据表,默认的对应关系是:模型类的名称(注意不一定是类名,后面会解释)转换为小写和下划线就是对应的数据表:

|模型名|对应数据表|

|--|--|

|User|user|

|UserType|user_type|

如果你的数据库配置定义了前缀(假设数据库的前缀定义是 think_),那么对应关系就是:

|模型名|对应数据表|

|--|--|

|User|think_user|

|UserType|think_user_type|

如果你的对应规则和上面的系统约定不符合,那么需要设置模型类的数据表名称属性,以确保能够找到对应的数据表。

代码如下:

~~~

namespace app\index\model;

use think\Model;

class User extends Model

{

protected $table = 'user_info';

}

~~~

table属性定义的是完整数据表名,如果你希望定义不带前缀的数据表名,可以使用name属性来定义模型的名称。

~~~

namespace app\index\model;

use think\Model;

class User extends Model

{

protected $name = 'user_info';

}

~~~

如果你同时定义了这两个属性,那么table属性是优先的。

调用模型类的方法其实和调用一个普通的类没有区别,不要觉得模型类有什么特殊。

模型操作的话,就可以对应下面的代码实现:

~~~

// 查询操作

$user = User::get(1);

// 取值操作

echo $user->name;

echo $user->email;

// 设置操作

$user->name = 'topthink';

$user->email = 'thinkphp@qq.com';

// 更新操作

$user->save();

~~~

事实上,由于模型类实现了ArrayAccess接口,因此一样可以使用数组方式操作:

~~~

// 查询操作

$user = User::get(1);

// 取值操作

echo $user['name'];

echo $user['email'];

// 设置操作

$user['name'] = 'topthink';

$user['email'] = 'thinkphp@qq.com';

// 更新操作

$user->save();

~~~

如果是在模型内部进行取值和设置操作怎么办?正确的获取方式应该是:

~~~

// 模型内部读取数据

echo $this->getData('name');

echo $this->getAttr('email');

// 模型内部设置数据

$this->data('name','thinkphp');

$this->setAttr('email','thinkphp@qq.com');

~~~

对象化操作的神奇是可以级联读取或者设置,例如:

~~~

// 查询操作

$user = User::get(1);

// 取值操作

echo $user->name;

echo $user->email;

// 关联取值

echo $user->role->name;

echo $user->contact->phone;

// 设置操作

$user->name = 'topthink';

$user->email = 'thinkphp@qq.com';

// 更新操作

$user->save();

// 关联设置

$user->role->name = 'admin';

$user->role->save();

$user->contact->phone = '123456789';

$user->contact->save();

~~~

这里使用了模型关联的概念

* * * * *

[参考链接](https://www.kancloud.cn/thinkphp/master-database-and-model/265556)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值