叨叨几句
中秋回来后,师父和我说:别用Springboot了,你在Springboot卡太久了。我们都是用PHP的,你用fastadmin写吧。OK,重新写。我在学校只学了C、C++、java和咪咪点python,我连PHP该用什么软件写都不知道。百度搭环境,一上午,没搭好,因为mysql抽疯了,所以要换一个版本,安装和之前一样,结果死活都启动不了。下午,有前辈来查看我这个菜鸟的进度了,此时apache和PHP已经装好了,他嫌慢,直接给我在PhpStorm上用了ftp连到远程服务器,nice~不用弄环境了,mysql也是直接连远程,哈哈本地上是屁都没有,管呢,能用就行。第二天,因为我现在在做的接口也不急着用,我打算好好学一下tp5,然后再学fastadmin,最后也是他嫌慢,直接把tp5框架和fastadmin装在了那个远程服务器,让我直接上手写。我觉得没问题,就只是我现在都写完接口和文档了,也还不会弄tp5框架和安装fastadmin。。。还有一点,我感觉眼睛快瞎了,视力直线下降、每天眼睛都好疼,这能有什么办法缓解吗?枯了
在敲的过程中遇到的几个问题:
1.使用fastadmin的一键生成crud,类型为datetime的字段,我希望能自动填充时间。fastadmin填充的时间戳在模型中是$autoWriteTimeStamp=‘int’,在进行数据库操作时会报错,不记得原话了,大概是日期类型不对。解决方法有两个:一是在每个模型中,修改$autoWriteTimeStamp,改为$autoWriteTimeStamp=‘datetime’,除此之外还要加一行,$dateFormat='Y-m-d H:i:s',文档和网上的解决方法好多都只改了$autoWriteTimeStamp的值,没定义日期格式,不定义是不行的,还是会报同样的错(当时我在坑里待了很久,哈)。二是在配置文件中改,在database.php里把那两行写上,然后注意!要把模型中的$autoWriteTimeStamp定义删掉。
//在模型中, 自动写入时间戳字段
protected $autoWriteTimestamp = 'datetime';
protected $dateFormat = 'Y-m-d H:i:s';
//在database.php中找到如下位置并做修改。注:改成true还是datetime记不清了,用的时候可以试一下到底是哪个,哈尴尬。
// 自动写入时间戳字段
'auto_timestamp' => true,
// 时间字段取出后的默认时间格式,默认为Y-m-d H:i:s
'datetime_format' => false,
2.一对多关联模型,一个task有多个file,在task的模型中添加如下代码。hasMany('关联模型名','关联表外键','主键')。一开始,field里我没有写task_id,就会报错,报错信息我已经忘了,大概是和模型相关的,在field里加上关联表外键,也就是这里的task_id就好了。
public function file(){
return $this->hasMany('File','task_id','id')
->field('id,task_id,belong_to,filename,filetype,file');
}
在task控制器中使用:
//实例化模型
$this->model = new \app\admin\model\zhdd\Task;
//当前是否为关联查询
$this->relationSearch = true;
//查询task表中全部数据
$result = $this->model
->with(['file'])
->order('id','desc')
->page($page,$pageSize)
->select();
3.还有一个没解决的,我配置了多个数据库,导致读操作正常,写操作提示Access denied for user 'root'@'localhost' (using password: NO)。我现在暂时的解决方法是写操作不用事务,直接进行写操作,这样就没问题。之前没配置另一个数据库时用事务进行的写操作也是正常运行的,可能数据库配置有问题,也许我不应该在配置文件中配置,应该在方法中或者模型里动态配置,可是在此之前我尝试过动态配置,方法中、模型里都试过了,它不行,所以我才在配置文件中配置的。算了,能跑就行吧(乐),要是他们说写操作必须用事务来写,那就再说。