协会如何运作? cakephp 3.x

How does the associations work? cakephp 3.x

我开始学习新的 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 名称和行名称:table = 用户,行 = user_title_id,table = user_titles 行 = id

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

好吧,您需要阅读相关文档 works。问题是协会看到你有:

User hasOne UserTitles, ok user has one title.

UserTitles hasMany User, titles hasMany this does not represent a relation.

bad association

你是这样说的:

table user rows: id, user_title_id

table user_titles rows: id, user_id

这不应该发生

应该是:

User hasOne UserTitles, ok user has one title

UserTitles belongsTo User, or you can use BelongsToMany if if this is required.

现在在您的 table 中:

table user rows: 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();