从 $Auth 中检索关联字段的 CakePHP 语法

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表中的其他字段。

当然,我可以使用一种解决方法:

  1. 检索“customer_id”值(如上)

  2. 为该 ID 创建一个关于“客户”过滤的查询

  3. 阅读其他领域

但我想这不是最好的方法。


手掌心
浏览 148回答 1
1回答

墨色风雨

您需要自定义 Auth finder 查询以包含客户记录。但请注意,整个 Auth 组件已被弃用,并将在版本 4 中替换为单独的身份验证和授权中间件插件。
打开App,查看更多内容
随时随地看视频慕课网APP