Yii2如何返回结果记录数呢?
那可以这样:
然后
然后
如果没有条件,把where去掉
Yii2如何返回结果记录数呢?
那可以这样:
然后
然后
如果没有条件,把where去掉
现在遇到一个问题,展示渠道表内的内容时,需要用到一个用户表的字段信息
controller
public function actionIndex()
{
$dataProvider = new ActiveDataProvider([
'query' => Channel::find(),
]);
return $this->render('index', [
'dataProvider' => $dataProvider,
]);
}
views
<?= GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'channel_id',
'channel_name',
'email',<=================== 用户表内的一个字段
'channel_created_at',
[
'class' => 'yii\grid\ActionColumn',
'header' => '操作',
'template' => '{view}{update}',
],
],
]); ?>
Channel模型里,定义一个getUser函数
两个思路:
1.联合查询数据,一次性把要的数据查询过来.
如楼上所示,还可以改进一下.
2.在要用到的地方临时查询数据.
就是将一打开主页显示的是登陆页面,而不是主页的右上角有个登陆的按钮怎么做?
自己在views/layouts里面写一个登陆页面
然后在控制器方法里面用$this->layout = ‘自定义登陆页面文件’ 例如 $this->layout=’login’
最后
输出页面
面。111
自己写一个单独的登录页面就行
我知道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,存在必然有道理
之前的版本实现:
'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
用 $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出来看看查询出来的结果的数据格式。然后根据格式在前端用相应的方式遍历取值即可
使用\Yii::$app->user->isGuest; 登陆前状态为1 登陆后 重新返回刷新登陆页面 就以下报错
没有user表,我数据库表是users。但是这个user是在哪里调用的?Database Exception – yii\db\Exception
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'qichunzhan.user' doesn't exist
The SQL being executed was: SELECT * FROM `user` WHERE (`id`='1') AND (`status`=10)
Error Info: Array
(
[0] => 42S02
[1] => 1146
[2] => Table 'qichunzhan.user' doesn't exist
)
↵
Caused by: PDOException
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'qichunzhan.user' doesn't exist
in /Users/chenqi/NetBeansProjects/WEB/GitOschina/qichunzhan/vendor/yiisoft/yii2/db/Command.php at line 839
去User模型里把表改成users
那个user表最好不要动,楼主,除非熟悉了再动,我吃过很多亏.
应该在 common/models/user.php 在这里看看登录的
也有可能在你的loginform里面
yii2 怎么设置网站logo
在/layouts/main.php中如下定义
我的为什么不行啊,还是yii自带的logo
已解决,谢谢
命名空间
比如yii2.0某个控制器里要调用系统自带的控制器
use yii/web/Controller
请问这个后半部分是路径吗?
但是我查了一下这个文件,它是在’XXX/yii2/web/controller’这个目录下,它自己里面写的命名空间是namespace yii/web
这个倒是和使用时是对应的,可是却不是路径啊,就算是路径应该也是yii2/web/ 但是我两边都改成yii2却是出现问题,麻烦哪位明白的朋友跟我说一下命名空间这一块,谢谢了
yii2的命名空间完全取决于别名!多了解一下别名,就知道具体是怎么自动加载的了。楼上几个木说到点上。
还可以参见一下这个地址:http://www.yiichina.com/tutorial/395 里面写的很详细。
命名空间 跟路径应该没啥关系吧,它想怎么命名就怎么命名。
yii2的命名空间是根据它文件自己的命名空间决定怎么调用的。比如:就像你说的,use yii/web/Controller,它是在XXX/yii2/web/controller这个目录下,它自己写的命名空间是namespace yii/web,那么在其他的控制器中调用的话,命名空间就是:它自己的命名空间,加上它是属于什么文件。比如:它是属于控制器的,那么调用时的命名空间就是:文件自己的命名空间/文件类型(Controller/Model)。你可以在仔细看看,或者你看看第三方类是怎么调用的,它们的命名空间是如何写的,自己再试试,就找到感觉了。
类似这样的
前台:http://www.demo.com/index.php
后台:http://www.demo.com/admin.php
我用的是该高级版,有front和backend两个模块,不会配置,求教!
你把www.demo.com所指向的目录配置到advanced目录下,
那么访问后台:http://www.demo.com/backend/web/index.php
访问到前台:http://www.demo.com/frontend/web/index.php
但是这样,url就比较长了,所以,你最好分配两个域名,比如后台域名为:backend.demo.com,然后这个域名目录直接指向到advanced/backend/web目录下,那么你访问的时候:http://backend.demo.com/index.php 就访问到后台
前台配置也类型,比如域名为frontend.demo.com,然后这个域名目录直接指向到advanced/frontend/web目录下,那么你访问的时候:http://frontend.demo.com/index.php 就访问到前台
生产环境中,这种方式用的也不少,一般把域名配置到公司首页,比如:www.demo.com,然后公司的管理后台用二级域名。
当然,还有其他的解决方案。看你习惯配置成哪种。
如果是本地环境,可以通过配置hosts文件,也可以通过端口来区分。
其实很好处理的,已经内置给你考虑周到了