我正在使用CakePHP 3.3.16开发一个库存系统,使用2个数据库。我能够连接两个数据库并显示两者的内容。在第一个,我有2个表:
资产(id,serial_number,is_connected)
AssetsAssignations(id,name,asset_id,last_inventory_date)
在第二个数据库中,我有一个表
计算机(id,serial_number,last_connected_date)
表示连接到ip地址的Assets子集。所以一些序列号可以在资产和机器中。
在MachinesController索引中,我把它放在: $connection = ConnectionManager::get('db2'); // where my second database is configured
$machines = $connection->execute('SELECT * FROM MACHINE');
$this->set(compact('machines'));
$this->set('_serialize', ['machines']);
在AssetController中,我把它放在:
$assets = $this->Assets->find();
$this->set(compact('assets'));
$this->set('_serialize', ['assets']);
在AssetsAssignationsController中,我暂时有这个:
$query = $this->AssetsAssignations->find()
->contain(['Assets']);
$filter = $this->Filter->prg($query);
$assetsAssignations = $this->paginate($filter, ['limit' => 50]);
$connection = ConnectionManager::get('db2'); // 'kace_db' where my second database is configured
$machines = $connection->execute('SELECT * FROM MACHINE ORDER BY NAME ASC');
$this->set(compact('machines'));
$this->set('_serialize', ['machines']);
$this->set(compact('assetsAssignations', 'machines'));
$this->set('_serialize', ['assetsAssignations']);
我在AssetsAssignations中需要的index.ctp是显示资产中的asset_id,serial_number。如果我们在另一个数据库(在表机器中)中有相同的serial_number,我们会显示相同条目的ip_address和last_inventory_date。
所以,就像我试图将2个相似的表与基于同一列(serial_number)的第3个表相关联。
这是AssetsAssignations index.ctp:
<?php foreach ($assetsAssignations as $assetsAssignation): ?>
<tr>
<td><?= h($assetsAssignation->asset->serial_number) ?></td>
<td><?= h($assetsAssignation->asset->is_connected) ?></td>
然后如果机器中存在相同的serial_number,我想在同一视图中显示它:
<td><?= h($assetsAssignation->something->last_conneced_date) ?></td>
我的问题:这可能吗?以及如何做到这一点?
感谢您的帮助。
答案 0 :(得分:0)
我找到了解决方案。在我的index.ctp中:
<?php
$ip_address = $assetsAssignation->ip_address;
$mac_address = $assetsAssignation->mac_address;
$is_found = False;
foreach ($machines as $row) :
if ($row['SERIAL_NUMBER'] == $assetsAssignation->asset->serial_number):
$ip_address = $row['IP'];
$mac_address = $row['MAC'];
$is_found = True;
endif;
endforeach; ?>
<?php if($is_found): ?>
<td><?= h($ip_address) ?></td>
<td><?= h($mac_address) ?></td>
<?php else: ?>
<td><span style="color:#fc352d;text-align:center;"><?= h($ip_address) ?></span></td>
<td><span style="color:#fc352d;text-align:center;"><?= h($mac_address) ?></span></td>
<?php endif ?>