0

我必须表

1. Products
2. VendorsInventories 

注意:产品可能包含多个 VendorsInventories。

在模型/表格/供应商库存中

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

        $this->setTable('vendors_inventories');
        $this->setDisplayField('id');
        $this->setPrimaryKey('id');

        $this->belongsTo('Products', [
            'foreignKey' => 'products_id',
            'joinType' => 'INNER'
        ]);
    }

并在:模型/表/ProductsTable.php

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

        $this->setTable('products');
        $this->setDisplayField('name');
        $this->setPrimaryKey('id');
        $this->addBehavior('Timestamp');
        $this->hasMany('VendorsInventories',[
            'foreignKey' => 'products_id',
            'joinType' => 'INNER'
        ]);
    }

在查询中:

$products=$this->Products->find('all')->contain(['VendorsInventories']);

结果是:

代码响应

我的主要问题是:如何选择包含关系数据的行。注意:belongsTo() 工作正常,我对 hasToMany() 有问题

4

1 回答 1

1

检查CakePHP 约定

hasMany、belongsTo/hasOne 关系中的外键默认被识别为相关表的(单数)名称,后跟 _id. 因此,如果 Users hasMany Articles,该articles表将users通过user_id外键引用该表。对于 article_categories名称包含多个单词的表,外键为article_category_id.

所以,改变

'foreignKey' => 'products_id',

'foreignKey' => 'product_id',
于 2019-12-16T10:30:24.287 回答