在cakephp 3.2中两次相同的表模型关联

时间:2016-06-23 10:10:53

标签: php cakephp cakephp-3.x cakephp-3.2

我在蛋糕3.2中做了模型关联

这里我已经为同一个表的一个id做了这个。

我试图为其他人做这件事,但它根本不起作用

以下是流程。

此输出我正在

{
   "id": 1,
   "publisher_id": 133,
   "user_id": 118,
   "Publisher": {
       "id": 133,
        "name": "Sradha sradha"
    }

这里我想绑定用户ID,它也属于同一个用户表

输出应该是这样的(我希望如下所示)

 {
     "id": 1,
     "publisher_id": 133,
     "user_id": 118,
     "Publisher": {
          "id": 133,
          "name": "Sradha sradha"
     }
     "Users": {
         "id": 118,
         "name": "Sradha anjo"
     }

此处publisher_id和user_id都属于同一个用户表。

$this->AdminRevenues->belongsTo('Users', [ 
    'className' => 'Users', 
    'foreignKey' => 'user_id', 
    'propertyName' => 'Users']);

$this->AdminRevenues->belongsTo('Users', [ 
   'className' => 'Publisher', 
   'foreignKey' => 'publisher_id', 
   'propertyName' => 'Publisher']);

$totalAdminRevenue = $this->AdminRevenues->find('all')
->contain([
     'Users' => ['queryBuilder' => function ($q) {
    return $q->select(['id', 'name']);
 }]])
 ->toArray();

请建议,任何建议都将受到高度赞赏。

3 个答案:

答案 0 :(得分:8)

别名必须是唯一的

这是做什么的:

$this->AdminRevenues->belongsTo('Users', [ 
    'className' => 'Users', 
    'foreignKey' => 'user_id', 
    'propertyName' => 'Users']);

$this->AdminRevenues->belongsTo('Users', [ 
   'className' => 'Publisher', 
   'foreignKey' => 'publisher_id', 
   'propertyName' => 'Publisher']);

使用AdminRevenues.user_id声明关联,然后立即使用关联AdminRevenues.publisher_id覆盖。实际上,对belongsTo的第一次调用没有做任何事情。

关联别名必须是唯一的,否则$foo = $this->AdminRevenues->Users之类的代码将是不明确的。因此,只需将关联别名设为唯一:

$this->AdminRevenues->belongsTo('Users', [ 
    'className' => 'Users', 
    'foreignKey' => 'user_id', 
    'propertyName' => 'Users']);

$this->AdminRevenues->belongsTo('Publishers', [ // <--- 
   'className' => 'Users',                      // <---
   'foreignKey' => 'publisher_id', 
   'propertyName' => 'Publisher']);

答案 1 :(得分:1)

在cakephp 3 +

中适用于我

假设你有两张桌子,即 1)RequestArticles 3)商店

我们有两个类似的模型: -

1)RequestArticlesTable 2)StoreTable

以下是您需要在RequestArticlesTable中定义的关联,我们正在将Store表连接两次

PokerHands

现在我们将如下所示连接Controller中的表并设置数据以查看: -

  public function initialize(array $config)
{
    parent::initialize($config);

    $this->table('request_articles');
    $this->displayField('id');
    $this->primaryKey('id');


    $this->belongsTo( 'yourstore', [
        'foreignKey' => 'store_id',
        'className' => 'Store'
    ]);

    $this->belongsTo( 'fromstore', [
        'foreignKey' => 'from_store_id',
        'className' => 'Store'
    ]);     
}

答案 2 :(得分:0)

我的解决方案,在容器中的控制器中调用它

$this->belongsTo('Senders', [
    'foreignKey' => 'sender_id',
    'joinType' => 'LEFT',
    'className' => 'Manager.Users'
]);

$this->belongsTo('Receivers', [
    'foreignKey' => 'receiver_id',
    'joinType' => 'LEFT',
    'className' => 'Manager.Users'
]);