未找到CakePHP基表视图

时间:2018-01-19 10:26:48

标签: php cakephp cakephp-3.0

先谢谢,

当我运行以下代码时,我在添加用户时显示以下错误。

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 

1 个答案:

答案 0 :(得分:2)

您正在以错误的方式加载/访问模型。虽然您可以在别名中使用斜杠来匹配子文件夹结构,但这将创建具有该确切名称的属性,即包括斜杠。

使用带有特殊字符的别名加载模型需要您通过{}访问该属性,例如$this->{'Admin/Users'},这非常难看,最好避免使用。

同样在您的add()操作中,您正在使用Users别名,该别名不会在子文件夹中查找,因此要么选择错误的文件,要么根本没有,导致自动表使用(\Cake\ORM\Table的实例而不是其具体的子类)。类似地,控制器模型自动加载功能也将默认查找Users

如此长的故事,如果你想使用loadModel(),那么直接在你的行动中使用它的返回值:

$Users = loadModel('Admin/Users');

或将其传递给属性,如果您在所有操作中都需要该模型,则 可以在beforeFilter()中执行此操作:

$this->Users = loadModel('Admin/Users');