У меня есть две простые таблицы «Customer» и «SalesChannels», но данные возвращают только данные клиента, каналы продаж пусты, но с опцией HasOne все работает отлично без каких-либо дополнительных модификаций.
Вот их структура:
CREATE TABLE `sales_channels` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`customer` int(11) NOT NULL,
`channel` varchar(45) DEFAULT NULL
PRIMARY KEY (`Id`,`customer`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
CREATE TABLE `customer` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(45) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
и их таблица классов:
class SalesChannelsTable extends Table
{
public function initialize(array $config)
{
$this->setPrimaryKey(['id', 'customer']);
$this->setTable('sales_channels');
$this->setEntityClass('App\Model\Entity\SalesChannels');
$this->belongsTo('Customer')->setForeignKey('customer');
}
}
class CustomerTable extends Table
{
public function initialize(array $config)
{
$this->setPrimaryKey('id');
$this->setTable('customer');
$this->setEntityClass('App\Model\Entity\Customer');
$this->hasMany('SalesChannels',[
'foreignKey'=>'customer',
'bindingKey'=>'id',
'propertyName'=>'channels'
]);
}
}
И Php код:
$customer = TableRegistry::get('Customer');
$customerEntity = $customer->find()->contain([
'SalesChannels'
]);
echo $customerEntity->sql();
foreach($customerEntity as $e){
debug($e);
}
Но результат не содержал содержимое каналов продаж, вот что он напечатал:
SELECT Customer.Id AS `Customer__Id`, Customer.username AS `Customer__username` FROM customer Customer
object(App\Model\Entity\Customer) {
'Id' => (int) 1,
'username' => 'test customer 1',
'channels' => [],
'[new]' => false,
'[accessible]' => [
'*' => true
],
'[dirty]' => [],
'[original]' => [],
'[virtual]' => [],
'[errors]' => [],
'[invalid]' => [],
'[repository]' => 'Customer'
}
object(App\Model\Entity\Customer) {
'Id' => (int) 2,
'username' => 'test customer 2',
'channels' => [],
'[new]' => false,
'[accessible]' => [
'*' => true
],
'[dirty]' => [],
'[original]' => [],
'[virtual]' => [],
'[errors]' => [],
'[invalid]' => [],
'[repository]' => 'Customer'
}
но с опцией HasOne все работает отлично без каких-либо дополнительных модификаций.