使用yii2自带的GII生成带query的model报错 [ 2.0 版本 ]
使用yii2.08生成的模型和CRUD后,两个模型文件menu.php和menuQuery.php,其中menu.php中是:class Menu extends \yii\db\ActiveRecord
,menuQuery.php继承与menu类
class MenuQuery extends Menu
其中menu.php中有一个查询方法是
/**
* @inheritdoc
* @return MenuQuery the active query used by this AR class.
*/
public static function find()
{
return new MenuQuery(get_called_class());
}
调用了menuQuery类的函数:
public function search($params)
{
$query = Menu::find();
// add conditions that should always apply here
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$this->load($params);
if (!$this->validate()) {
// uncomment the following line if you do not want to return any records when validation fails
// $query->where('0=1');
return $dataProvider;
}
// grid filtering conditions
$query->andFilterWhere([
'id' => $this->id,
'parent' => $this->parent,
'order' => $this->order,
]);
$query->andFilterWhere(['like', 'name', $this->name])
->andFilterWhere(['like', 'route', $this->route])
->andFilterWhere(['like', 'data', $this->data]);
return $dataProvider;
}
直接在生成的视图文件中访问admin,发生了错误,提示:
PHP Warning – yii\base\ErrorException
Invalid argument supplied for foreach()
主要发生在menu.php类中的MenuQuery(get_called_class())调用导致的。谁遇到过类似的问题。
共 4 个回答
-
创建模型(Model Generator)时候不能选择Generate ActiveQuery,否则生成的类中有个find()方法会报错。
public static function find() { return new SystemLogQuery(get_called_class()); // 假设Model是SystemLog }
此时由于SystemLogQuery顶层父类是object并实现了Configurable接口,其默认会有个构造函数:
public function __construct($config = []) { if (!empty($config)) { Yii::configure($this, $config); // 这里是出错的地方具体看Yii.php大概521行 } $this->init(); }
错误本身是传递了字符串给foreach,因此会报这个错,不知道是不是框架本身的问题还是哪里的配置错了。总之去掉就好了,然后执行CRUD Generator时,会生成一个。当然,直接删掉find()方法也可以尝试。
梨子的夏天 觉得很赞
lisgang
注册时间:2015-07-26
最后登录:2018-11-15
在线时长:7小时49分
最后登录:2018-11-15
在线时长:7小时49分
- 粉丝2
- 金钱245
- 威望0
- 积分315