2016-05-04 02:22:04 5764次浏览 4条回答 1 悬赏 10 金钱

使用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())调用导致的。谁遇到过类似的问题。

  • 回答于 2016-05-04 13:24 举报

    你是不是叫李绍刚

    2 条回复
    回复于 2016-05-04 14:47 回复

    不是的,你和李绍刚认识?

    回复于 2016-05-04 15:23 回复

    恩呢 可熟悉了

  • 回答于 2016-05-04 23:22 举报

    來看看錯誤提示為 : Invalid argument supplied for foreach()

    代表參數是無效的可能要再您有使用到 foreach 的地方
    改為

    if (is_array($values) || is_object($values))
    {
        foreach ($values as $value)
        {
            ...
        }
    }
    
    4 条回复
    回复于 2016-05-05 01:54 回复

    您使用yii2自带的GII生成model和CRUD没有出现这样的问题吗?生成时选择生成modelQuery的选项。

    回复于 2016-05-05 12:27 回复

    Model 生成的時候 選 => Generate ActiveQuery?
    如果是的話 並不會造成問題歐!!

    回复于 2016-05-09 12:11 回复

    不是Model生成时出现的问题,是在生成CRUD时,会提示覆盖之前model生成的ActiveQuery的文件,覆盖后直接浏览index页面会发生那样的错误。

    回复于 2016-05-10 10:52 回复


    我操作上 建立 model , modelQuery (models 點選 Generate ActiveQuery)
    之後建立 CRUD 沒有問題, (填入 models, controllers, Class)
    但是沒出現覆蓋 ActiveQuery 的選項, 想請問您是怎麼操作的。

  • 回答于 2016-05-16 17:53 举报

    您好,我也遇到了,请问你解决了吗?

    1 条回复
    回复于 2016-05-17 19:15 回复

    还没有呢,这两天忙,没有看这个追这个问题的进度。希望解决的人可以共享。估计是新版的GII生成activityQuery函数有问题。

  • 回答于 2017-03-25 17:48 举报

    创建模型(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
见习主管

lisgang

注册时间:2015-07-26
最后登录:2018-11-15
在线时长:7小时49分
  • 粉丝2
  • 金钱245
  • 威望0
  • 积分315

热门问题