Yii2 hasOne,hasmany联表查询添加条件方法

1、yii2中的hasOne与hasMany方法非常好用,但是,在联查的过程中如果要加条件,那改怎么办呢?
你可能说,我可以直接在后面跟where呀,比如这样:

public function getCanWeiList(){
        $tableAlias = Table::tableName();
        $where['status'] = 1;
        return $this->hasOne(Table::className(),['tableid'=>'id'])->where($where);
    }

2、使用匿名函数来添加条件

Customer::find()->with([
    'orders' => function ($query) {
        $query->andWhere('status = 1');
    },
    'country',
])->all();

3、使用$model->canWeiList获取到关联表的所有数据,如果你想加where等条件的话,可以使用$query = $model->getCanWeiList(),这个得到的是一个ActiveQuery,你可以继续使用$query->where([‘xxx’=>’xxx’])的。

yii2-GridView在开发中常用的功能及技巧

GridView 小部件在开发中常用的功能及技巧。持续更新中….

数据网格或者说 GridView 小部件是Yii中最强大的部件之一。
它有一个属性名叫 dataProvider ,这个属性能够提供一个数据提供者的示例并且可以显示所提供的数据,即使用 yii\grid\GridView::columns 属性的一组列配置,在一个表格中渲染每一行数据。

例如

use yii\grid\GridView;
echo yii\grid\GridView::widget([
    'dataProvider' => $dataProvider,
]);

继续阅读yii2-GridView在开发中常用的功能及技巧

Yii2使用小技巧集合

1、格式化返回数据格式

Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;

2、JS按需加载

<?php $this->beginBlock('test') ?>  
    $(function($) {  
      $('#mybutton').click(function() {  
        alert('OK');  
      });  
    });  
<?php $this->endBlock() ?>  
<?php $this->registerJs($this->blocks['test'], \yii\web\View::POS_END);//在页面最后加载 ?>

#按需加载JS文件
$this->registerJsFile('@web/js/jquery-ui.custom.min.js',['depends'=>['backend\assets\AppAsset']]);

 

Yii2邮件配置

在 common/config/main-local.php中写入以下代码配置 Mail代理

return [
        'components' => [
            ...//your code,
            //以下是 mail 的配置
            'mailer' => [
                'class' => 'yii\swiftmailer\Mailer',
                'viewPath' => '@common/mail',
                'transport' => [
                    'class' => 'Swift_SmtpTransport',
                    //我用的是QQ 的代理,所以这里是 QQ 的配置信息
                    'host' => 'smtp.qq.com',
                    'port' => 587,
                    'encryption' => 'tls',    
                    //这部分信息不应该公开,所以后期会由数据库中拿取
                    'username' => '你的 QQ 号',
                    'password' => '你的 QQ 密码',
                ],
                //发送的邮件信息配置
                'messageConfig' => [

                    'charset' => 'utf-8',

                    'from' => ['83398365@qq.com' => 'BugAsk']
                ],

            ],'

        ]

    ];

继续阅读Yii2邮件配置

Yii2使用主题功能实现多端匹配

首先在项目配置文件config/main.php中配置主题配置

'as theme' => [
      'class' => 'frontend\components\ThemeControl',
    ],

* 该配置项与components同级

然后在frontend\components目录下创建ThemeControl.php文件内容如下:

<?php
namespace frontend\components;

use Yii;
use yii\base\Object;
use yii\base\ActionFilter;
class ThemeControl extends ActionFilter{
    public function init()
    {
        if(Yii::$app->devicedetect->isMobile())
        {
            $theme = "mobile";
        }else{
            $theme = "pc";
        }
        Yii::$app->view->theme = Yii::createObject([
            'class' => 'yii\base\Theme',
            'pathMap' => [
                '@app/views' => [
                    "@app/views/{$theme}",
                ]
            ]
        ]);
    }
}

继续阅读Yii2使用主题功能实现多端匹配

Yii分页的使用

1、Controller中action

<?
use yii\data\Pagination;
....
public function actionList()
{
  $query = Article::find()->where(['status' => 1]);
  $countQuery = clone $query;
  $pages = new Pagination(['totalCount' => $countQuery->count()]);
  $models = $query->offset($pages->offset)
      ->limit($pages->limit)
      ->all();
  return $this->render('index', [
      'models' => $models,
      'pages' => $pages,
   ]);
}

默认分页的数量是20,你可以设置pageSize为你想要的

$pages = new Pagination([ 
    'totalCount' => $totalCount, 
    'pageSize' => 5, 
]);

继续阅读Yii分页的使用