先谢谢,
当我运行以下代码时,我在添加用户时显示以下错误。
SQLSTATE [42S02]:未找到基表或视图:1146表' bookstore.users'不存在
我在\src\Controller\Admin\UsersController.php
<?php
namespace App\Controller\Admin;
use Cake\Core\Configure;
use Cake\Network\Exception\ForbiddenException;
use Cake\Network\Exception\NotFoundException;
use Cake\View\Exception\MissingTemplateException;
use Cake\Event\Event;
class UsersController extends AppController
{
public function beforeFilter(Event $event)
{
parent::beforeFilter($event);
$this->loadModel('Admin/Users');
}
public function index()
{
$this->set('headerinfo', array('seoTitle' => 'Dash Board', 'pageTitle' => 'Dashboard', 'breadcrumbs' => null));
$this->set('users', $this->Users->find('all'));
}
public function add()
{
$breadcrumbs = array(
array('', 'Users')
);
$this->set('headerinfo', array('seoTitle' => 'Add User', 'pageTitle' => 'Add User', 'breadcrumbs' => null));
$this->loadModel('Users');
$user = $this->Users->newEntity();
if ($this->request->is('post')) {
$user = $this->Users->patchEntity($user, $this->request->getData());
if ($this->Users->save($user)) {
$this->Flash->success(__('User inserted successfully.'));
return $this->redirect(['action' => 'add']);
}
$this->Flash->error(__('Unable to add the user, please contact support'));
}
$this->set('user', $user);
}
}
用户表模型位于以下文件\src\Model\Table\Admin\UsersTable.php
<?php
namespace App\Model\Table\Admin;
use App\Model\Entity\Admin\User;
use Cake\ORM\Table;
use Cake\ORM\Query;
use Cake\Routing\Router;
use Cake\Validation\Validator;
class UsersTable extends Table
{
public function initialize(array $config)
{
parent::initialize($config);
$this->table('admin_users');
$this->primaryKey('auID');
}
}
用户表的实体模型位于以下文件\src\Model\Entity\Admin\User.php
<?php
namespace App\Model\Entity\Admin;
use Cake\ORM\Entity;
use Cake\Auth\DefaultPasswordHasher;
class User extends Entity {
protected $_accessible = [
'*' => true,
'auID' => false,
];
protected function _setAuPass($password){
return (new DefaultPasswordHasher)->hash($password);
}
}
表格结构: -
admin_users
Column Type Null Default Comments MIME
auID int(11) No
auName varchar(75) No
auPass varchar(255) No
auFullName varchar(75) No
auStatus varchar(2) Yes A A=Active, I=Inactive
createdOn datetime Yes NULL
modifiedOn datetime Yes NULL
Indexes
Keyname Type Unique Packed Column Cardinality Collation Null Comment
PRIMARY BTREE Yes No auID 1 A No
auName BTREE No No auName 1 A No
auStatus BTREE No No auStatus 1 A Yes
答案 0 :(得分:2)
您正在以错误的方式加载/访问模型。虽然您可以在别名中使用斜杠来匹配子文件夹结构,但这将创建具有该确切名称的属性,即包括斜杠。
使用带有特殊字符的别名加载模型需要您通过{}
访问该属性,例如$this->{'Admin/Users'}
,这非常难看,最好避免使用。
同样在您的add()
操作中,您正在使用Users
别名,该别名不会在子文件夹中查找,因此要么选择错误的文件,要么根本没有,导致自动表使用(\Cake\ORM\Table
的实例而不是其具体的子类)。类似地,控制器模型自动加载功能也将默认查找Users
。
如此长的故事,如果你想使用loadModel()
,那么直接在你的行动中使用它的返回值:
$Users = loadModel('Admin/Users');
或将其传递给属性,如果您在所有操作中都需要该模型,则 可以在beforeFilter()
中执行此操作:
$this->Users = loadModel('Admin/Users');