PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Thursday, March 17, 2022

[FIXED] Controller doesn't get hasOne relationship data - Cakephp

 March 17, 2022     cakephp     No comments   

Issue

I have a problem with related tables in CakePHP. I can't get the related table data include in the form.

I have two Entities. One of them is "Users" and the other one is "Subjects". Every User has a subject. Table "Subject" has foreign key idUser from Users table.

I added in UsersTable:

$this->hasOne('Subjects');

And I added in SubjectsTable:

$this->belongsTo('Users', [
            'foreignKey' => 'idUser',
            'joinType' => 'INNER'
        ]);

In the view (signup), I have this:

<div class="form-group">
          <?php echo $this->Form->control('Subject.name',['label' => 'Asignatura','placeholder' => 'Ingrese asignatura','class' => 'form-control']) ?>
        </div>

In the controller, I have this:

$user = $this->Users->patchEntity($user, $this->request->getData(),['associated' => 'Subjects']);

When I debug $user, I am getting this result:

 \src\Controller\UsersController.php (line 113)

object(App\Model\Entity\User) {

    'id' => '11111111',
    'name' => 'Leo',
    'firstlastname' => 'Messi',
    'secondlastname' => 'Cuccittini',
    'email' => 'leo.messi@gmail.com',
    'password' => '$2y$10$E02nd/w89BDvgCyz36bQdeBbujOLrSdON1e6CD25aDYCP2VeLkNNm',
    'role' => '2',
    '[new]' => true,
    '[accessible]' => [
        'id' => true,
        'name' => true,
        'firstlastname' => true,
        'secondlastname' => true,
        'email' => true,
        'password' => true,
        'role' => true
    ],
    '[dirty]' => [
        'id' => true,
        'name' => true,
        'firstlastname' => true,
        'secondlastname' => true,
        'email' => true,
        'password' => true,
        'role' => true
    ],
    '[original]' => [],
    '[virtual]' => [],
    '[hasErrors]' => false,
    '[errors]' => [],
    '[invalid]' => [],
    '[repository]' => 'Users'

}

So, I am not getting in the controller the data from Subject.

Any help, please.


Solution

Model

$this->hasOne('Subjects', [
    'foreignKey' => 'userId'
]);

Controller:

$user = $this->User->get($id, ['contain' => ['Subjects']);

Entity/User.php

protected $_accessible = [

   'subjects' => true
   // ...

];

Form

https://book.cakephp.org/3.0/en/views/helpers/form.html#associated-form-inputs

Change: Subject.name to user.subject.name

<?php echo $this->Form->control('user.subject.name',['label' => 'Asignatura','placeholder' => 'Ingrese asignatura','class' => 'form-control']) ?>


Answered By - Salines
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing