协会如何运作? 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();
我开始学习新的 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();