我的网站以Object
为模型,ObjectSearch
为searchModel。我意识到我在两个不同的控制器中已经有很多重复。例如,FirstController
有这个:
$arr = Yii::$app->db->createCommand('SELECT id, name, address
FROM hosts)->queryAll();
然后在我的网站SecondController
的某些部分也需要使用相同的查询。
如何从不同的控制器一遍又一遍地重复使用该查询?
我在说这个:
public function search($params)
{
$query = Host::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
]
]);
.
.
.
return $dataProvider;
}
我还有另一个问题。我打算做不同的询问。进行另一个查询的最佳方法是什么?我应该用那个
吗? public function search($params)
可能会加上像这样的参数吗?
public function search($params, $cond)
{
if ($cond == true) {
$query = *something;
}
else {
$query = *something_else;
}
.
.
.
return $dataProvider;
}
答案 0 :(得分:1)
对于常见功能,您可以创建一个帮助类
namespace myapp\myhelperdir
class MyQueryHelper
{
public static function mySelectFunction ($param)
{
// your code for function
return $yourResult;
}
然后你可以在项目的每个部分简单地添加
来引用这些功能use myapp\myhelperdir\MyQueryHelper
$myResult = MyQueryHelper::mySelectFunction($myParam);
答案 1 :(得分:1)
在根文件夹中,您有组件文件夹。在组件文件夹内,创建一个页面,如 UserInfoComponent.php 。此页面很常见,可以在任何地方使用。
这是目录结构
YourProjectFolder
->assets
->commands
->components
->UserInfoComponent.php
.
.
UserInfoComponent.php
<?php
namespace app\components;
use Yii;
use yii\base\Component;
class UserInfoComponent extends Component
{
.
.
public function getUserDetails() {
$arr = Yii::$app->db->createCommand('SELECT id, name, address FROM hosts')->queryAll();
return $arr;
}
.
.
.
}
现在,如何在控制器或视图中调用此函数。
控制器或查看
<?
$arrValue = Yii::$app->userinfo->getUserDetails();
?>