CakePHP 3.7。这是我的“用户”表:
<?php
namespace App\Model\Table;
use Cake\Datasource\EntityInterface;
use Cake\ORM\Association\BelongsTo;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;
class UsersTable extends Table
{
public function initialize(array $config)
{
parent::initialize($config);
$this->setTable('users');
$this->setDisplayField('id');
$this->setPrimaryKey('id');
$this->belongsTo('Customers', [
'foreignKey' => 'customer_id',
'joinType' => 'LEFT'
]);
}
public function validationDefault(Validator $validator)
{
...
}
public function buildRules(RulesChecker $rules)
{
$rules->add($rules->isUnique(['email']));
$rules->add($rules->existsIn(['customer_id'], 'Customers'));
return $rules;
}
}
和“客户”表:
<?php
namespace App\Model\Table;
use App\Model\Entity\Customer;
use Cake\Datasource\EntityInterface;
use Cake\ORM\Association\HasMany;
use Cake\ORM\Table;
use Cake\Validation\Validator;
class CustomersTable extends Table
{
public function initialize(array $config)
{
parent::initialize($config);
$this->setTable('customers');
$this->setDisplayField('company_name');
$this->setPrimaryKey('id');
$this->hasMany('Users', [
'foreignKey' => 'customer_id'
]);
}
public function validationDefault(Validator $validator)
{
...
}
}
好吧,现在我想通过 检索控制器和模板中的关联字段customer_id,例如:
$this->Auth->user('customer_id')); // <--- WORKS
$this->Auth->user('Customers.company_name')); // <--- ???
我不明白必须使用什么语法通过外键 ( customer_id
) “导航”才能读取Customers
表中的其他字段。
当然,我可以使用一种解决方法:
检索“customer_id”值(如上)
为该 ID 创建一个关于“客户”过滤的查询
阅读其他领域
但我想这不是最好的方法。
墨色风雨