Я использую построитель запросов, предоставленный CakePHP 3, для извлечения «предложений» из базы данных с записями из другой таблицы с использованием ['contain' => 'AnotherTable']
, но извлекается только одна из таблиц, помещенных в массив contain
, как могу ли я сделать две записи таблицы будут восстановлены?CakePHP3 «содержать» не извлекает данные
запрос с двумя таблицами (только 'OfferBanners' был retrived):
$setting = [
'fields' => ['id', 'product_id', 'date_start', 'date_end', 'name', 'description'],
'contain' => ['Products', 'OfferBanners']
];
$offers = TableRegistry::get('Offers')
->find('all', $setting)->hydrate(false)->toArray();
Результат массива:
Initialize из OffersTable:
public function initialize(array $config)
{
parent::initialize($config);
$this->table('offers');
$this->displayField('id');
$this->primaryKey('id');
$this->addBehavior('Timestamp');
$this->belongsTo('Products', [
'foreignKey' => 'product_id',
'joinType' => 'INNER'
]);
$this->hasMany('OfferBanners', [
'foreignKey' => 'offer_id'
]);
}
Initialize из ProductsTable:
public function initialize(array $config)
{
$this->table('products');
$this->displayField('id');
$this->primaryKey('id');
$this->addBehavior('Timestamp');
$this->belongsTo('Stores', [
'foreignKey' => 'store_id',
'joinType' => 'INNER'
]);
$this->hasMany('Bookings', [
'foreignKey' => 'product_id'
]);
$this->hasMany('ProductFeatures', [
'foreignKey' => 'product_id'
]);
$this->hasMany('Offers', [
'foreignKey' => 'product_id'
]);
}
SQL из таблиц:
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(255) NOT NULL,
store_id INT NOT NULL,
sub_category_id INT NOT NULL,
price DECIMAL(7,2) NOT NULL,
created DATETIME,
modified DATETIME,
FOREIGN KEY store_key (store_id) REFERENCES stores(id),
FOREIGN KEY sub_category_key (sub_category_id) REFERENCES sub_categories(id)
);
CREATE TABLE offers (
id INT AUTO_INCREMENT PRIMARY KEY,
product_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
description VARCHAR(1000) NOT NULL,
date_start DATETIME NOT NULL,
date_end DATETIME NOT NULL,
created DATETIME,
modified DATETIME,
FOREIGN KEY product_key (product_id) REFERENCES products(id)
);
CREATE TABLE offer_banners (
id INT AUTO_INCREMENT PRIMARY KEY,
path VARCHAR(255) NOT NULL,
offer_id INT NOT NULL,
created DATETIME,
modified DATETIME,
FOREIGN KEY offer_key (offer_id) REFERENCES offers(id)
);
вы не выбрали поле из соответствующих моделей – arilia
@arilia Но в "OfferBanners" является retrived все поля – Ricardo
@arilia ничего не пишет по ошибке.log – Ricardo