tp5.0笔记4:模型

1.模型在thinkphp5.0的mvc中定位:数据库操作,并将数据验证的部分分离出去了。模型一般都是与数据库的表一一对应的, 模型的名称采用大驼峰命名,在获取实际的数据表的时候,自动转化为小写+下划线命名的数据表名称,如果模型的名称与表名没有一一对应起来,那么在模型中 设置属性table 或者name;

也可以针对单个模型配置,单独不同的数据库连接参数   

 'mysql',
    // 服务器地址
   'hostname' => '127.0.0.1',
    // 数据库名
   'database' => 'test',
    // 数据库用户名
   'username' => 'root',
    // 数据库密码
   'password' => '',
   // 数据库连接端口
   'hostport' => '',
   // 数据库连接参数
   'params' => [],
   // 数据库编码默认采用utf8
   'charset' => 'utf8',
   // 数据库表前缀
   'prefix' => 'think_',
   // 数据库调试模式
   'debug' => true,
 ];
}

2、基础操作

2.1、新增数据

nickname = '流年';$user->email = '[email protected]';$user->birthday =strtotime('1977-03-05');
    $user->save();
  }
}

默认情况下,实例化模型后执行save操作都是执行的数据库insert操作,如果你希望执行update操作,可以在在调用save方法之前调用isUpdate方法

isUpdate()->save();//update 操作

如果你觉得一个个给模型赋值太麻烦了,你也可以改用下面的操作

nickname . ':' . $result->id . ' ]新增成功';

 

 

2.2、批量新增数据

 

 

'李三','email'=>'[email protected]'],   
               ['nickname'=>'李四','email'=>'[email protected]'] ] 
     $user->saveAll($list);
}

 

 

2.3、查询单条数据

 

 

nickname 
   echo $user->email;
}

 

模型的get方法用于获取数据表的数据,并返回当前的模型对象实例,通常传入主键作为参数

 

与Db类的find方法区别:Db类的find方法返回是数组,而模型get方法查询返回的是当前的模型对象的实例

如果不是根据主键来查询的,可以将条件传入

'流年'])    
   echo $user->nickname; echo $user->email;
}

如果根据email等单一字段条件查询

public function read(){ 
$user=UserModel::getByEmail('[email protected]');    
echo $user->nickname; 
echo $user->email;
}

 

也可以使用查询构建器来完成

 

find(); 
   echo $user->nickname; 
   echo $user->email;
}

 

 

2.4、查询多条数据

 

 

如果是查询多条数据,可以使用all方法

 

如果不是使用主键查询,可以传入数组条件查询,如下

 

1]);
}

 

也可以使用查询构建器完成条件查询

 

select();
}

 

2.5、更新数据

 

nickname ='李四';
    $user->email = '[email protected]';
    $user->save();
}

 

默认情况下,查询模型数据后返回的模型实例执行save方法,都是执行数据库update操作,如果你需要执行save方法是执行数据库的insert操作,可以在save方法调用调用之前调用isUpdate方法

 

$user->isUpdate(false)->save();

也可以直接调用update方法,执行数据更新操作

 

2.6、删除数据

 

直接传入主键,调用destroy方法

public function delete(){
   $result = UserModel::destroy($id);
}

也可以调用查询构造器

public function delete(){
    $user = UserModel::where('id',1)->delete();
}

2.7、读取器和修改器

一般在读取数据库某些数据,例如时间戳读取的时候,时常要进行格式化,如果每次读取数据后,都要需要进行处理就显得非常麻烦,那么tp5.0模型提供了读取器,在读取的数据的会自动进行格式化,使用如下

那么我们每次读取birther这个字段的时候就会自动格式化。

如果我们将birther储存到数据库,一般将接受的2016-5-2日期转为时间戳,再储存到数据库

那么tp5.0提供了修改器,将接收到的birther日期格式转为时间戳格式,使用如下

2.8、类型转换

正对前面的birther读取器和修改器,可以进一步的简化如下:

'timestamp',
  ]
}

对于简单的数据格式转换之类的处理,设置类型转换比定义修改器和读取器更加方便

tp5.0类型转换支持:integer 、float、boolean、array,json、object、datetime、timestamp、serialize;

2.9、自动时间戳和自动完成

实际开发,数据库表中要保存的记录添加时间、修改时间,tp5.0提供自动时间戳机制,只需在数据库配置文件中将

'auto_timestamp'=>true,

那么数据库就会在数据库create_time、update_time两个字段自动写入时间戳(默认时间戳)、如果表中不是用这两个作为字段名、那么可以在模型中进行设置

 'timestamp:Y/m/d',
   ];
   
   protected $createTime = 'create_at';
   protected $updateTime = 'update_at';
}

如果数据库保存这两个字段的格式不是时间戳,而是datetime格式,那么我们需要在模型中设置

'timestamp'];
   protected $autoWritetimeStamp = 'datetime';
}

如果全局的时间戳都是统一的,也可以直接在数据库配置文件中  直接

'auto_timestamp'=>'datetime'

如我们需要自动写入其它的字段、那么我们需要在模型中进行设置

'timestamp:Y/m/d',
     ];
     protected $insert = ['status'=>1];  //自动写入status =1;
}

除了insert属性外,还支持auto(新增、更新)、update属性(仅更新时写入);

 

 

 

2.10验证

tp5.0将验证器与模型进行分开设置

验证器(位于application/index/validate/User.php)命名与模型名保持一致,内容如下

进行验证

// 新增用户数据
public function add()
{
     $user = new UserModel;
     if ($user->allowField(true)->validate(true)->save(input('post.'))) {
         return '用户[ ' . $user->nickname . ':' . $user->id . ' ]新增成功';
     } else {
         return $user->getError();//返回验证错误提示信息
     }
}

也可以在控制器进行验证

validate($data,'User');
       if (true !== $result) {
       return $result;
   }
   $user = new UserModel;
   // 数据保存
   $user->allowField(true)->save($data);
   return '用户[ ' . $user->nickname . ':' . $user->id . ' ]新增成功';
}
}

 

助手函数  validate静态方法可以正对单个字段进行验证

 

Validate::is('值','验证规则');

 

欢迎加入laravel技术交流群 :784030154

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(tp5.0)