yii2开发遇到的常见问题以及解决方案 [ 技术分享 ]
作者:白狼 出处:http://www.manks.top/article/yii2_common_problem_resolve 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
yii2 遇到的问题解决 1、测试项目列表,id搜索,显示
1052 Column 'id' in where clause is ambiguous
The SQL being executed was:
SELECT COUNT(*) FROM `a` LEFT JOIN `b` ON `a`.`id` = `b`.`id` WHERE `id`=1
解决方式: ASearch.php search方法关于id的搜索前面增加表名 //当前表a,关联表 b
$query = a::find();
$query->joinWith(['b']);
......
$query->andFilterWhere([
......
'a.id' => $this->id, //注意到这里id前面添加表名以便区分哪个表的id
...... //其他代码照写
]);
2、DetailView content:ntext,这种的attribute带标签,但是在DetailView就是想按照 html的样式显示,怎么搞喃?
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'desc:ntext', //gii 默认生成text字段:
[
'attribute' => 'desc',
'format' => 'html', //显示html样式的方案
'value' => $model->desc,
],
],
]) ?>
源码追踪:
//yii\widgets\DetailView;
//yii\i18n\Formatter.php
//查看DetailView,找到 yii\i18n\Formatter.php文件,各种format都可以解决:
public function format($value, $format)
{
......
$method = 'as' . $format;
......
}
......
public function asHtml($value, $config = null)
{
......
}
3、DetailView,显示的内容添加链接可以跳转,类文件同问题2,解决犯案如下:
DetailView::widget([
'model' => $model,
'attributes' => [
......
[
'attribute' => '用户',
'format' => 'raw',
'value' => Html::a($model->name, ['/url', 'id' => $model->id]),
],
],
]);
4、yii2脚本自动执行的时候,服务器上执行crontab -e 打开文件添加执行命令即可 5、问题:取分组中每组中最新的数据 原解决方案(效率很低)
select `id`, `relation_id`, `created_at`
from `a`
where `id` in (
select SUBSTRING_INDEX(GROUP_CONCAT(`id` order by `id` desc),',',1)
FROM `a`
where `uid` = 100
group by `relation_id`
)
order by `id` desc
优化方案(仍然很慢,但是有效果)
select `id`, `relation_id`, `created_at`
from `a`
where `id` in (
select max(`id`) FROM `a` where `uid` = 100 group by `relation_id`
)
order by `id` desc
二次优化方案(拆分sql)
$db = Yii::app()->db;
$sql = "select max(`id`) `m` FROM `a` where `uid` = 100 group by `relation_id`;
$res = $db->createCommand($sql)->queryAll();
$temp = '';
if ($res){
foreach ($res as $v)
{
$temp .= $v['m'].',';
}
$temp = rtrim($temp, ',')
$sql = "select `id`, `relation_id`, `created_at` from `a` where `id` in ({$temp}) order by `id` desc";
$lastInfo = $db->createCommand($sql)->queryAll();
}";
关于问题:取分组中每组中最新的数据,暂时仍没找到好的解决方案,如果你有好的解决方案,欢迎留言。
白狼栈
注册时间:2016-04-12
最后登录:2023-03-08
在线时长:90小时7分
最后登录:2023-03-08
在线时长:90小时7分
- 粉丝332
- 金钱1371
- 威望500
- 积分7271