本篇文章主要记录工作中遇到的问题及解决办法。
1、按多个条件排序
场景:按时间和记录状态排序,其中记录状态有1,2,3但是1和2是一类不排序,3排到最后。
代码实现:
$list = UserFeedbackRecord::find()
->select('feedback_sheet_id,describe,submit_time,feedback_state')
->where(['vin'=>$data['vin']])
->where(['feedback_state'=>[1,2]])
->orderBy('submit_time desc')
->asArray()
->all();
$list2 = UserFeedbackRecord::find()
->select('feedback_sheet_id,describe,submit_time,feedback_state')
->where(['vin'=>$data['vin']])
->where(['feedback_state'=>3])
->orderBy('submit_time desc')
->asArray()
->all();
$list=array_merge($list,$list2);
解释:可以先按时间查找状态为1和2的记录然后在查找状态为3的记录,最后将两次查到的结果合并。
2、合并、分割数组
//合并数组
$list=array_merge($list,$list2);
//分割数组,三个参数分别为原数组,起始下标,个数
$new_list=array_slice($list,($page-1)*$pagecount,$pagecount);
3、更新数据
UserFeedbackRecord::updateAll(['feedback_state'=>2],['feedback_sheet_id'=>$data['feedback_sheet_id']]);
两个参数,第一个更新的字段及值,第二个为条件,可以为多个条件。
4、为继承ActiveRecord的model添加新的属性。
场景:有时候需要返回给客户model中没有定义的信息。此时需要给model添加新的属性。并将数据存储到model对象中返回给客户端。
代码实现:重写attributes ()方法
public function attributes ()
{
$attributes = parent::attributes();
$attributes[] = 'unread_number';
$attributes[] = 'submit_msg';
$attributes[] = 'reply_msg';
return $attributes;
}
5、controller返回查询结果,view用table展示。
//controller
return $this->render('view', [
'model' => $submit_msg,
'reply_msg'=>$reply_msg
]);
//view
<table width="90%" class="table">
<tr>
<td>回复人</td>
<td>消息内容</td>
<td>回复时间</td>
</tr>
<?php
foreach ( $reply_msg as $rs ) {
?>
<tr>
<td><?php
if($rs['reply_people']==1){
echo "管理员";
}else{
echo "用户";
}
?></td>
<td><?php echo $rs['message'];?></td>
<td><?php echo $rs['reply_time'];?></td>
</tr>
<?php
}
?>
</table>
//推荐一个简单好看的CSS样式,不然原始表格样式好丑
<style type="text/css">
table
{
border-collapse: collapse;
margin: 0 auto;
text-align: center;
}
table td, table th
{
border: 1px solid #cad9ea;
color: #666;
height: 30px;
}
table thead th
{
background-color: #CCE8EB;
width: 100px;
}
table tr:nth-child(odd)
{
background: #fff;
}
table tr:nth-child(even)
{
background: #F5FAFA;
}
</style>
6、当table内容过多时,滑动条滑动展示。
解决方法,在table外面加一个div,操作div。设定div高和overflow-y:auto属性。如下:
<div style="height:290px;width:100%;display:block;overflow-y:auto;">
<table></table>
</div>
样式: