Yii2 mysql 请求错误与"Call to a member function getCount() on array"



我对Yii2很陌生,但似乎是一个很好的框架。我尝试了一下,并使用GII自动创建器来生成我的crud。为了进行测试,我想创建一个配方数据库。

我创建了很好的crud,一切都很好…当我只使用列表中的id时。为此,我想创建自己的SQL语句,但我总是遇到错误"调用成员函数getCount()对数组">.我刚刚发现我想要一个计数数组中的记录,我尝试了"->count("*")"也在声明中。我有类似的错误,但作为"字符串"不像"数组"。我在谷歌上搜索了很多,但我找不到任何好的解决方案。这就是为什么我想在这里问。

我有3个表应该链接。
这是我的声明在控制器

public function actionIndex()
{
$searchModel = new IngredientsSearch();
//$dataProvider = $searchModel->search(Yii::$app->request->queryParams); #Created with Gii and works fine

$dataProvider = (new yiidbQuery())
->select(['recipes.title', 'ingredientslist.name', 'quantities.shortname', 'ingredients.amount'])
->from('ingredients')
->join('LEFT JOIN', 'ingredientslist', 'ingredients.ingredientslist_id = ingredientslist.id')
->join('LEFT JOIN', 'recipes', 'ingredients.recipe_id = recipes.id')
->join('LEFT JOIN', 'quantities', 'ingredients.quantity_id = quantities.id')
->limit(20)
->all();

/*
* >> Working Statement from DB
* SELECT l.name, r.title, q.shortname, i.amount FROM `ingredients` as i
* LEFT JOIN ingredientslist as l ON i.ingredientslist_id = l.id
* LEFT JOIN recipes as r ON i.recipe_id = r.id
* LEFT JOIN quantities as q ON i.quantity_id = q.id
*
*/
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}

如果有帮助的话:

  • 配料列表包含所有配方中存在的所有配料(名称,短名称,来源,…)
  • 食谱是包含食谱本身(标题,描述,工作时间,…)的表格
  • 数量是使用数量表(如kg, ml,…)
  • 配料表是配料信息组合的表格(如2个鸡蛋的数量)

或者有另一种方法来解决这个问题,也许在Yii2的ORM,或自动sql创建器或我还没有找到的东西?希望有人能帮我!

最好cyperfax

在dataProvider中你不应该使用all()函数。但是只有SQL查询

的代码
$dataProvider = (new yiidbQuery())
->select(['recipes.title', 'ingredientslist.name', 'quantities.shortname', 'ingredients.amount'])
->from('ingredients')
->join('LEFT JOIN', 'ingredientslist', 'ingredients.ingredientslist_id = ingredientslist.id')
->join('LEFT JOIN', 'recipes', 'ingredients.recipe_id = recipes.id')
->join('LEFT JOIN', 'quantities', 'ingredients.quantity_id = quantities.id');

all()函数执行真正的查询,但在DataProvider中,这被委托给内部方法,主要用于分页

和您还应该避免limit(),因为您可以直接配置dataProvider

来管理分页count()函数(在您的情况下失败)由dataProvider直接管理。将查询封装为子查询并计算该子查询的计数。

感谢scaisEdge。
我找到了一个解决方案来生成快速,良好的工作关系CRUD。大感谢也Krajee Yii扩展更详细的yii2增强gii从他们。嗯,我在使用这个模块时遇到了一些麻烦,但是在检查了安装后所需的模块,并重新安装他们通过作曲家,他们工作得很好。

我现在有了一个包含配料、来源、图像、用户、评级等的食谱的完整关系crud,只需要20分钟的工作。我喜欢这个模块!

对于那些也想使用这个的人,在下面我描述了我的安装和我必须为我的东西做这个模块的解决方案。也许有人需要这个:

  • 创建包含所有字段的表
  • 创建表
  • 之间的关系
  • 通过composer安装了yii2增强的gii(在github上描述)
  • 添加了必要的东西到config/web.php (if "module";
'modules' => [
'gridview' =>  [
'class' => 'kartikgridModule'
// enter optional module parameters below - only if you need to
// use your own export download action or custom translation
// message source
// 'downloadAction' => 'gridview/export/download',
// 'i18n' => []
],
'datecontrol' => [
'class' => 'kartikdatecontrolModule',
// see settings on http://demos.krajee.com/datecontrol#module
],
// If you use tree table
'treemanager' =>  [
'class' => 'kartiktreeModule',
// see settings on http://demos.krajee.com/tree-manager#module
]
]
  • 这里我有我的第一个问题,因为gridview没有找到,然后我重新安装了扩展,如果还安装了我应该安装的作曲器的所有建议。
  • 那么第二个问题是日期拾取器,所以在重新安装的日期拾取器也描述在模块帮助(见链接)
  • 第三个问题是我的模型和控制器的生成不能找到关系模型。因此,我删除了所有内容,并从没有任何关系的表开始,如用户,数量,成分表。然后我创建了Cruds,其中包含菜谱、历史、评分表等关系。图像到我在i/o扩展中使用的设置从krajee
  • 然后我在索引视图中添加了一些菜单元素,以便我可以轻松地编辑和管理cruds。

    我希望如果有人有类似的问题,我的描述可以帮助一点。对我来说,我只能说,scaisEdge的建议帮助我找到了这个…

最好的,Cyperfax

最新更新