Yii 框架未知 属性 异常
Yii Framework Unknown Property Exception
我知道这可能看起来微不足道,但我真的想不通。我开始使用 Yii Framework 和 MySQL 开发数据库应用程序。我尝试遵循简单的基本教程:
http://www.yiiframework.com/doc-2.0/guide-start-databases.html
,但我使用了自己的 table "Supermarkets"。
我收到此错误:
未知 属性 – yii\base\UnknownPropertyException
变得未知 属性: app\models\Supermarkets::name
很明显是方法 get ('name') 导致了这个错误,但我不知道如何解决这个问题。
这是我的代码:
...models/supermarkets.php:
<?php
namespace app\models;
use yii\db\ActiveRecord;
class Supermarkets extends ActiveRecord
{
}
...controllers/SupermarketsController.php:
<?php
namespace app\controllers;
use yii\web\Controller;
use yii\data\Pagination;
use app\models\Supermarkets;
class SupermarketsController extends Controller
{
public function actionIndex()
{
$query = Supermarkets::find();
$pagination = new Pagination([
'defaultPageSize' => 5,
'totalCount' => $query->count(),
]);
$supermarkets = $query->orderBy('name')
->offset($pagination->offset)
->limit($pagination->limit)
->all();
return $this->render('index', [
'supermarkets' => $supermarkets,
'pagination' => $pagination,
]);
}
}
...views/Supermarkets/index.php:
<?php
use yii\helpers\Html;
use yii\widgets\LinkPager;
?>
<h1>Supermarkets</h1>
<ul>
<?php foreach ($supermarkets as $supermarket): ?>
<li>
<?= $supermarket->name?>
<?= $supermarket->location ?>
<?= $supermarket->telephone ?>
<?= $supermarket->fax ?>
<?= $supermarket->website ?>
</li>
<?php endforeach; ?>
</ul>
<?= LinkPager::widget(['pagination' => $pagination]) ?>
Supermarkets.db:
CREATE TABLE IF NOT EXISTS `supermarkets` (
`Name` varchar(71) NOT NULL,
`Location` varchar(191) DEFAULT NULL,
`Telephone` varchar(68) DEFAULT NULL,
`Fax` varchar(29) DEFAULT NULL,
`Website` varchar(24) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
有什么建议吗?
可能是你输了模型Supermarkets
:
/**
* @inheritdoc
*/
public static function tableName()
{
return 'Supermarkets';
}
如果您不设置方法,默认的 table-名称将是 supermarkets
。因为在 yii\db\ActiveRecord
中设置:
public static function tableName()
{
return '{{%' . Inflector::camel2id(StringHelper::basename(get_called_class()), '_') . '}}';
}
编辑
使用从你的模型中删除这个
/**
* @inheritdoc
*/
public static function tableName()
{
return 'Supermarkets';
}
并使用
<?= $supermarket->Name?>
<?= $supermarket->Location ?>
<?= $supermarket->Telephone ?>
<?= $supermarket->Fax ?>
<?= $supermarket->Website ?>
或者更好的方法。使用您的第一个代码。并更改列 -> 设置小首字母。那样
CREATE TABLE IF NOT EXISTS `supermarkets` (
`name` varchar(71) NOT NULL,
`location` varchar(191) DEFAULT NULL,
`telephone` varchar(68) DEFAULT NULL,
`fax` varchar(29) DEFAULT NULL,
`website` varchar(24) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
我知道这可能看起来微不足道,但我真的想不通。我开始使用 Yii Framework 和 MySQL 开发数据库应用程序。我尝试遵循简单的基本教程: http://www.yiiframework.com/doc-2.0/guide-start-databases.html ,但我使用了自己的 table "Supermarkets"。 我收到此错误:
未知 属性 – yii\base\UnknownPropertyException 变得未知 属性: app\models\Supermarkets::name
很明显是方法 get ('name') 导致了这个错误,但我不知道如何解决这个问题。
这是我的代码:
...models/supermarkets.php:
<?php
namespace app\models;
use yii\db\ActiveRecord;
class Supermarkets extends ActiveRecord
{
}
...controllers/SupermarketsController.php:
<?php
namespace app\controllers;
use yii\web\Controller;
use yii\data\Pagination;
use app\models\Supermarkets;
class SupermarketsController extends Controller
{
public function actionIndex()
{
$query = Supermarkets::find();
$pagination = new Pagination([
'defaultPageSize' => 5,
'totalCount' => $query->count(),
]);
$supermarkets = $query->orderBy('name')
->offset($pagination->offset)
->limit($pagination->limit)
->all();
return $this->render('index', [
'supermarkets' => $supermarkets,
'pagination' => $pagination,
]);
}
}
...views/Supermarkets/index.php:
<?php
use yii\helpers\Html;
use yii\widgets\LinkPager;
?>
<h1>Supermarkets</h1>
<ul>
<?php foreach ($supermarkets as $supermarket): ?>
<li>
<?= $supermarket->name?>
<?= $supermarket->location ?>
<?= $supermarket->telephone ?>
<?= $supermarket->fax ?>
<?= $supermarket->website ?>
</li>
<?php endforeach; ?>
</ul>
<?= LinkPager::widget(['pagination' => $pagination]) ?>
Supermarkets.db:
CREATE TABLE IF NOT EXISTS `supermarkets` (
`Name` varchar(71) NOT NULL,
`Location` varchar(191) DEFAULT NULL,
`Telephone` varchar(68) DEFAULT NULL,
`Fax` varchar(29) DEFAULT NULL,
`Website` varchar(24) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
有什么建议吗?
可能是你输了模型Supermarkets
:
/**
* @inheritdoc
*/
public static function tableName()
{
return 'Supermarkets';
}
如果您不设置方法,默认的 table-名称将是 supermarkets
。因为在 yii\db\ActiveRecord
中设置:
public static function tableName()
{
return '{{%' . Inflector::camel2id(StringHelper::basename(get_called_class()), '_') . '}}';
}
编辑
使用从你的模型中删除这个
/**
* @inheritdoc
*/
public static function tableName()
{
return 'Supermarkets';
}
并使用
<?= $supermarket->Name?>
<?= $supermarket->Location ?>
<?= $supermarket->Telephone ?>
<?= $supermarket->Fax ?>
<?= $supermarket->Website ?>
或者更好的方法。使用您的第一个代码。并更改列 -> 设置小首字母。那样
CREATE TABLE IF NOT EXISTS `supermarkets` (
`name` varchar(71) NOT NULL,
`location` varchar(191) DEFAULT NULL,
`telephone` varchar(68) DEFAULT NULL,
`fax` varchar(29) DEFAULT NULL,
`website` varchar(24) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;