谁一开始就是大神?

PHP 第66页

PHP

你们操作数据库的层是怎么写的,我不确我的写法有没有问题,特来请教大家[2.0]

coolelephant阅读(107)

我看有很项目中在完成一些数据库操作时用的是静态方法完成的。

就是说在ActiveRecord的子类里增加一个静态方法,然后再Controller里直接用 Class::function形式调取。

举个例子:

比如有个User类,对应数据库中User表,

Class User extends ActiveRecord
{
    public static function addUser($username.$password)
    {
         //写一些sql插入这条记录
    }
}

然后再Controller里直接用

User::addUser($username.$password)

这样的方式调用可以么?有不安全的地方么?因为我了解到的,静态方法是属于类的,如果两个请求同时调了这个方法,会冲突么?虽然我写了些测试代码,没有发生冲突的情况,但是我还是不放心,因为之前写别的的时候都是new 一个普通对象,然后调对象方法实现的,还没这么用过,不怎么放心。

另外就是 还有没其他的问题。

大家平时都怎么用的呢?

应该是两个参数吧:
个人觉得,不是说不能这么做,而是可以直接使用yii提供的增删改操作
使用原生sql语句:
要多看看文档:http://www.yiichina.com/doc/guide/2.0/db-active-record
框架这个东西,应该灵活应用,不是说就不能一定怎么做,一定就要那么做,没有这个硬性要求。
函数式写法,不建议学习
应该保持OO的写法,static fun意义不大,更多的我们会用这个思维来做一些tools
如果调用频繁可以考虑
$user = new User();
$user->createNew($user, $pass); //do pass encode and blabla in class instant.
我想你去理解下什么是MVC,这是一种思想,
数据打交道的教给M。C是控制逻辑,本来M要做的事,你给C做,虽然结果可行。但是脱离了MVC的思想

php/redis更新缓存的问题[2.0]

Lislim阅读(221)

if(!$redis->exists('cache')) 
{
    echo '写入缓存<br>';
    $sql = "select * from user limit 0,3";
    $rs = mysqli_query($connect,$sql) or die('db conn error');
    while( $result = mysqli_fetch_assoc($rs) )
    {
         array_push($results,$result);
    }

    $cache = json_encode($results);
    echo $cache;
    $redis->set('cache',$cache,1200);
}
else
{
    echo '读取缓存<br>';
    echo $redis->get('cache');
}

问题:
如果我在后台修改了user某个id的name值,或者添加、删除了 如何去实时更新缓存?

是不是应该在后台update/delete操作里面去更新缓存?

比方我有一百条数据 是不是就因为update了一下某个值,就去做一次更新缓存.这样是不是不好.

通常都是这样做的。当然你也可以用缓存依赖来实现,不用自己维护缓存更新。

yii2怎么将登陆页面独立处理而不是显示在主页里面?[2.0]

Nobleyak阅读(110)

就是将一打开主页显示的是登陆页面,而不是主页的右上角有个登陆的按钮怎么做?

自己在views/layouts里面写一个登陆页面
然后在控制器方法里面用$this->layout = ‘自定义登陆页面文件’ 例如 $this->layout=’login’
最后
输出页面
面。111
自己写一个单独的登录页面就行

$_GET['test']会报错[2.0]

Candyyak阅读(97)

我知道yii可以用 yii::$app->request->get() 获取所有的get参数

但是为什么我直接打印 Print_r($_GET['test']); 的时候报错

PHP Notice – yii\base\ErrorException

Undefined index: xp

我记得1里面是没有这样报错的 是不是有什么地方设置?

$_GET数组中没有xp这个键 你使用了当然会有警告
请问你在哪个地方打印$_GET的,$_GET真正被处理的时候在这里,假设是基于?r=这样子的
我在windows下不会报错,但如果放在服务器端,就会出错,可能跟php环境有问题,类似的问题可能还会有好几个地方。
所以在使用post和get接收数据的时候,首先是使用Yii::$app->request->get() Yii::$app->request->post(),如果使用过一次之后,获取其他参数也可以使用$_GET$_POST
当然会报错了,要自己做判断 ,所以不建议直接用$_GET $_POST 而是用yii封装好的方法
用框架提供的request,存在必然有道理

在最新的2.0.7的migrate中,怎样为一个字段添加备注?[2.0]

Harryhope阅读(102)

之前的版本实现:

'phone' => Schema::TYPE_INTEGER . '(11) NOT NULL COMMENT "备注"'

2.0.7

'phone' =>$this->integer([11])->notNull()->?

看了下源码,最终会调用:yii\db\QueryBuilder的createTable方法
他举了个例子:
也就是数组中的key会作为字段,value作为类型,然后得看这个方法getColumnType
他首先判断传过来的类型是不是ColumnSchemaBuilder这个对象,如果不是,做一些正则判断,最终返回一个字符串,那反正最终就是构成一个合法的字段声明, 比如:
那你可以试试,在构建的时候,直接这样做:
这样应该也是可行的。具体需要你去试试。
2.0.7不支持之前版本的实现了?是不能那样用了吗?
你是不是希望有个->comment('xxx')方法啊 哈哈,好吧,这种非标准的语法不兼容其他数据库,所以yii没提供,只能自己按照你前一种写了,
之前的方法还能接着用吧?
不错,’username’ => $this->string(32)->notNull()->unique().” COMMENT ‘管理员账号'”,
这样果然实现了 坐等2.0.8

如何遍历查询结果[2.0]

likelyKeo阅读(111)

$query = $command->queryAll() 获取了sql查询结果,然后render给前端,
前端用 foreach($query as $value) 显示$value->id 时出错:Trying to get property of non-object
如果用模型获取数据(Models::find())进行遍历是没有问题的,但我想用自定义的sql语句查询结果进行遍历,该怎么做?

你用原生sql查询出来的结果,应该是数组,所以,问题不是不能遍历,而是你应该取数组的值,比如$value[‘id’],而不是$value->id,最好的验证方式,就是你在render给前端前,var_dump出来看看查询出来的结果的数据格式。然后根据格式在前端用相应的方式遍历取值即可

这个删除语句要怎么改呀兄弟们快来![2.0]

HaHCherry阅读(101)

Info::deleteAll('id>:id',array(':id'=>2));我要删除ID大于2的数据库数据 结果系统提示我未定义的变量!咋回事呀 Info是模型层的名字

Info::deleteAll(['>','id',2])
这样

$app=newyii\web\Application($config);[2.0]

Aibytom阅读(109)

1.$app=new yii\web\Application($config);
2.

class Yii extends \yii\BaseYii
{
}

以上的

yii\web\Application
yii\BaseYii

是什么意思呢?

命名空间:http://php.net/manual/zh/language.namespaces.rationale.php
有何作用:避免命名重复;顾名思义,我定义多个区域(命名空间),彼此之间的区域互不干扰,但同区域下却不能有相同的命名;
命名空间, 他类似于指向某个目录,该目录下不能有同名的文件(相同的命名空间下不能有同名的类)一开始是为了解决类名重复问题。
后来用做类自动加载

对数据库数据进行更改操作的新手问题[2.0]

Leolovely阅读(99)

$demo=Info::find()->where(['id'=>2])->all();
        $demo=array('name'=>$model->name,'E_mail'=>$model->email,'phone'=>$model->phone);
        $info->save();

应该怎么改了 研究好久啦啊 运行不报错 数据库没有被更改 只是添加了一条空数据
已经解决 谢谢大家 真心感谢

若已经存在$id 记录,则更新,若不存在,则写入新数据记录。

关于model数据保存[2.0]

HaHStone阅读(111)

比如说我有一个文章模型 title content auther 这三个字段是必填的
然后我还有一些其他的非必填字段 time isPublish 等等
我在\models\Post.php这个文件里面添加了规则

public function rules()
    {
        return [
            [['title', 'content', 'isPublish'], 'required']
        ];
    }

要求这三个字段必填
但是当我给其他属性赋值的时候(比如time字段)再 model->save()
只会保存验证的 三个字段 其余的字段全部都保存不进去 为什么

确实会保存不进去,一般不需要验证的,都加一个['time', 'safe'], 告诉yii这个属性是安全的,不需要验证
不批量赋值可以保存吧。。。

登录

找回密码

注册