cakephp Model validation error message not displaying in hasOne association

后端 未结 2 572
佛祖请我去吃肉
佛祖请我去吃肉 2021-01-21 20:57

i want to do model validation with association in a single form. i have two tables users(parent table) and user_details(child

相关标签:
2条回答
  • 2021-01-21 21:28

    You're trying to patch your details entity with the wrong data ($this->request->getData()). But really, there is no need to create, patch and save a separate entity in your add function, because the first level of associations will be handled transparently for you. This should work just fine:

    public function add() {
        $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(__('The user has been saved.'));
                return $this->redirect($this->referer());
            } else {
                $this->Flash->error(__('The user could not be saved. Please, try again.'));
            }
        }
        $this->set(compact('user'));
    }
    

    Or, at least, it should once you correct the field names from the details entity to include "user_detail.", as @ndm said; your HTML above is still showing $this->Form->control('address',...) instead of $this->Form->control('user_detail.address',...), though it also includes fields for city and state, which aren't in your screen shot, so it's unclear what your current version might look like.

    0 讨论(0)
  • 2021-01-21 21:47

    validation working for only users table because i have created newEntity for users table only.

    That has nothing to do with it. The problem is that you are not following the naming conventions properly.

    Filenames must match classnames, so it's UserDetailsTable.php, not UserDetails.php, UsersTable.php, not usersTable.php, etc.

    And the correct property name for a hasOne association, is the singular, underscored variant of the association name, so for UserDetails that would be user_detail, consequently the name for the related form control should be user_detail.name.

    See also

    • Cookbook > CakePHP at a Glance > CakePHP Conventions > File and Class Name Conventions
    • Cookbook > Views > Helpers > Form > Creating Inputs for Associated Data
    • Cookbook > Database Access & ORM > Saving Data > Saving HasOne Associations
    • Cookbook > Database Access & ORM > Associations - Linking Tables Together > HasOne Associations
    0 讨论(0)
提交回复
热议问题