无法在CakePHP2中将模型链接在一起

时间:2015-06-12 14:29:04

标签: php cakephp cakephp-2.6

我正在使用CakePHP 2.6.7。

这是我的数据库(简化):

***Users***
id
username

***Cars***
id
CarMake
CarModel
NumberPlate
user_id

***Addresses***
id
address
postalcode
city
country

***Addresses_Users***
user_id
address_id

这就是我想要的:

  • 一个用户可以拥有多辆汽车,一辆汽车只有一个用户拥有。
  • 一个用户可以拥有多个地址,一个地址可以由多个用户拥有。
  • 一辆车可以有多个地址,一个地址可以由多辆车拥有。

所以现在我有一个模型User.php:

<?php
class User extends AppModel {

     public $hasMany = array(
         'Car' => array(
             'classname' => 'Car')
     );

     public $hasAndBelongsToMany = array(
         'Address' => array(
             'classname' => 'Address')
     );
?>

模特Car.php:

<?php
class Car extends AppModel {

     public $belongsTo = array(
         'User' => array(
             'className' => 'User'
         )
     );

     public $hasMany = array(
         'Address' => array(
             'classname' => 'Address')
     );
}
?>

模型Address.php:

<?php
class Address extends AppModel {

     public $belongsTo = array(
         'User' => array(
             'className' => 'User'
         ),

         'Car' => array(
             'classname' => 'Car')
     );
 }
 ?>

我试图将汽车与地址联系起来,但我无法让它发挥作用...... 如果我做debug($this->User->find());我有这个结果:

array(
'User' => array(
    'id' => '1',
    'username' => 'wblondel',
),
'Car' => array(
    (int) 0 => array(
        'id' => '2',
        'CarMake' => 'Allard',
        'CarModel' => '2005',
        'NumberPlate' => '56QDS1',
        'user_id' => '1',
    ),
    (int) 1 => array(
        'id' => '5',
        'CarMake' => 'Alvis',
        'CarModel' => '25',
        'NumberPlate' => '5lDS1',
        'user_id' => '1',
    )
),
'Address' => array(
    (int) 0 => array(
        'id' => '2',
        'address' => 'fghfghgf',
        'postalcode' => '78200',
        'city' => 'buchelay',
        'country' => '40'
    ),
    (int) 1 => array(
        'id' => '3',
        'address' => 'jkjkjk',
        'postalcode' => '69100',
        'city' => 'villeurbanne',
        'country' => '59'
    )
)
)

我首先想要的是每辆车都有一个阵列&#34;地址&#34; ......

谢谢!

2 个答案:

答案 0 :(得分:2)

根据您的描述,您的关联看起来是错误的。他们应该是这样的: -

用户

<?php
class User extends AppModel {

    public $hasMany = array(
        'Car'
    );

    public $hasAndBelongsToMany = array(
        'Address'
    );
}

<强>汽车

<?php
class Car extends AppModel {

    public $belongsTo = array(
        'User'
    );

    public $hasAndBelongsToMany = array(
        'Address'
    );
}

<强>地址

<?php
class Address extends AppModel {

    public $hasAndBelongsToMany = array(
        'Car',
        'User'
    );
}

除非您要使用的别名与模型名称不同或模型属于插件,否则您无需使用className

然后,如果您使用Containable behavior,您应该可以使用以下内容获取所有内容: -

$this->User->find(
    'all',
    array(
        'contain' => array(
            'Address',
            'Car' => array( 
                'Address'
            )
        )
    )
);

答案 1 :(得分:1)

要控制从find()查询中确切检索的内容,您可以使用API documentation

顺便说一句,我认为你的Address模型中有一个错误,因为地址不属于“用户”,但可能有很多。它应该是您在User模型中所做的HABTM关系。