WEGSY85
WEGSY85

Reputation: 291

CakePhp association hasMany

First of all, I know there is a lot of questions like mine, but I tested a lot of solutions, read the documentation but my problem is not solved.

I'm using Cakephp 2.x

I get 2 tables users and phone_numbers

    CREATE TABLE `users` (
    `id` varchar(32) NOT NULL,
    `user_group_id` int(11) unsigned DEFAULT NULL,
    `username` varchar(100) DEFAULT NULL,
    `password` varchar(255) DEFAULT NULL,
    `salt` text,
    `email` varchar(100) DEFAULT NULL,
    `first_name` varchar(100) DEFAULT NULL,
    `last_name` varchar(100) DEFAULT NULL,
    `created` datetime DEFAULT NULL,
    `modified` datetime DEFAULT NULL,
    PRIMARY KEY (`id`),
    KEY `user` (`username`),
    KEY `mail` (`email`),
    KEY `users_FKIndex1` (`user_group_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    CREATE TABLE `phonenumbers` (
    `id` varchar(32) NOT NULL,
    `user_id` varchar(32) NOT NULL,
    `phoneNumber` varchar(64) NOT NULL,
    `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    CONSTRAINT `fk_phonenumbers_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)   
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

In my model User, I get :

     var $hasMany = array(
    'LoginToken' => array('className' => 'Usermgmt.LoginToken', 'limit' => 1),
    'PhoneNumber' => array('className' => 'PhoneNumber'),
    );

And In my model PhoneNumber I get :

    var $belongsTo = 'Usermgmt.User';

When I try to select my users, there is no link between my models

    $this->User->find('all');
    array(
       (int) 0 => array(
          'User' => array(
              'password' => '*****',
              'id' => '1',
              'user_group_id' => '1',
              'username' => 'admin',
              'salt' => '',
              'email' => '[email protected]',
              'first_name' => 'Admin',
              'last_name' => '',
              'created' => '2016-03-16 13:49:49',
              'Modified' => '2016-03-21 13:04:26',
           )
        ),
               (int) 1 => array(

        ..........

What am I doing wrong? I need to have my find like this

       array("User"=>array(my data),
             "PhoneNumber"=>array(my data)
            )

Thanks for your help.

Upvotes: 0

Views: 71

Answers (2)

Usman Ali Maan
Usman Ali Maan

Reputation: 414

Use in model PhoneNumber

var name='PhoneNumber';
$belongsTo = 'User';

and in model User

var name='User';
$hasMany='PhoneNumber';

Upvotes: 1

Basant Rules
Basant Rules

Reputation: 807

Add this into model/User.php Hope it will work

public $hasMany = array(
    'Phonenumber' => array(
    'className' => 'Phonenumber',
    'foreignKey' => 'user_id',
    'conditions' => array('Phonenumber.user_id' => 'User.id'),
    'dependent' => true
)

Upvotes: 0

Related Questions