代码之家  ›  专栏  ›  技术社区  ›  rkaartikeyan

找不到CakePHP基表视图

  •  0
  • rkaartikeyan  · 技术社区  · 6 年前

    提前感谢,

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

    SQLSTATE[42S02]:找不到基表或视图:1146 table'bookstore。用户的不存在

    我在中有用户控制器 \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 回复  |  直到 6 年前
        1
  •  2
  •   Jason Aller    6 年前

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

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

    在您的 add() 您正在使用的操作 Users alias,它不会在子文件夹中查找,因此可能会拾取错误的文件,或者根本没有,从而导致使用自动表(的一个实例 \Cake\ORM\Table 而不是其具体子类)。同样,控制器模型自动加载功能也将查找 用户 默认情况下。

    长话短说,如果你想 loadModel() ,然后直接在操作中使用其返回值:

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

    或者通过将其传递给一个属性 能够 杀害 beforeFilter() 如果您在所有操作中都需要该模型:

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