协会如何运作? cakephp 3.x

时间:2015-04-24 12:28:04

标签: associations cakephp-3.0

我开始学习新的cakephp 3.x. 我想这样做:

$data = $this->users->find('all');//i want to get user title name
debug($data->toArray());//but i use associations. It is not join.

我的协会代码:

    use Cake\ORM\Table;
    use Cake\Validation\Validator;

    class UserTitlesTable extends Table
    {
        public function initialize(array $config) {
            $this->table('user_titles');
            $this->hasMany('Users');
        }
    }

    use Cake\ORM\Table;
    use Cake\Validation\Validator;
    use Cake\ORM\Query;

    class UsersTable extends Table
    {
        public function initialize(array $config) {
            $this->table('users');
            $this->hasOne('UserTitles');
        }
    }

我的表名和行名:table = users,Row = user_title_id,table = user_titles Row = id

我不写连接。我如何自动加入。

1 个答案:

答案 0 :(得分:3)

您需要阅读文档works。问题是协会看到你有:

  

用户拥有一个UserTitles,ok用户有一个标题。

     

UserTitles hasMany User,titles has has this not not not relation。

     
    

糟糕的关联

  

你这么说:

  

表用户行:id,user_title_id

     

table user_titles rows:id,user_id

这不应该发生

应该是:

  

用户拥有一个UserTitles,ok用户有一个标题

     

UserTitles属于用户,或者如果需要,可以使用BelongsToMany。

现在在你的表中:

  

表用户行:id

     

table user_titles rows:id,user_id

use Cake\ORM\Table;
use Cake\Validation\Validator;

class UserTitlesTable extends Table
{
    public function initialize(array $config) {
        $this->table('user_titles');
        $this->displayField('id');
        $this->primaryKey(['id', 'user_id']);
        $this->belongsTo('Outputs', [
          'foreignKey' => 'user_id',
          'joinType' => 'INNER'
        ]);
    }
}

use Cake\ORM\Table;
use Cake\Validation\Validator;
use Cake\ORM\Query;

class UsersTable extends Table
{
    public function initialize(array $config)
    {
        $this->table('users');
        $this->displayField('id');
        $this->primaryKey('id');
        $this->hasOne('UserTitles', [
          'foreignKey' => 'user_id'
        ]);
    }
}

并且这种关系应该是工作

$data = $this->Users->UserTitles->find('all')->toArray();