CakePhp where() условие не работает для отношения HasMany
Я должен стол
1. Products
2. VendorsInventories
NB: Товар может содержать более одного инвентаря поставщиков.
В Model / Table / 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']);
и результат:
Мой главный вопрос: как выделить строки, содержащие данные отношения.NB: ownTo() работает нормально, у меня проблема с hasToMany()
1 ответ
Ознакомьтесь с соглашениями CakePHP
Внешние ключи в отношениях hasMany, ownTo/hasOne распознаются по умолчанию как (единственное) имя связанной таблицы, за которым следует
_id
. Итак, если у пользователей есть многоArticles
, тоarticles
таблица будет относиться кusers
стол черезuser_id
внешний ключ. Для стола вродеarticle_categories
имя которого состоит из нескольких слов, внешний ключ будетarticle_category_id
.
Итак, меняем
'foreignKey' => 'products_id',
к
'foreignKey' => 'product_id',