cakePhp 3连接两个不相关的mysql表(松散相关)


cakePhp 3 join two unrelated mysql tables (loosely related)

我继承了一个设计怪异(也许不是)的数据库。我正在迁移到cakeHP,但修改它会破坏很多东西,所以我想保持原样。

我有两张衣服和图片的桌子,衣服有这个字段:

clothes
{
ean
reference
reference_name
size 
color
}

ean(欧洲文章编号)是唯一的id,每个ean都是参考颜色和尺码的唯一组合,但一个参考有多张不同衣服共享的图片(尺码和颜色,颜色或尺码与图片不一致)。

pictures
{
id
id_reference
reference_name
picture
}

"id_reference"与衣服表中的"reference"字段匹配,但它们没有正式关联,也没有标记为外键。

我有这个函数来检索JSON数组

public function women() 
 {
 $page = $_POST['page'];
 $this->autoRender = false;
$articles = TableRegistry::get('Clothes');
$results = $page;
if(is_numeric($page))
{
$pageNumber = (int)$page;
$results = $articles->find('all',['page'=>1])
    ->select(['reference','nombre'])
    ->where(['Clothes.reference_name' => 'WOMEN'])
    ->group('reference')
    ->limit(10)
    ->contain(['Pictures']);
}
 $this->response->body(json_encode($results));
 return $this->response;
}
class ClothesTable extends Table
{
public function initialize(array $config)
    {
        $this->hasMany('Pictures', [
            'className' => 'Pictures',
            'foreignKey' => 'id_reference',
            'bindingKey' => 'reference'
        ]);
    }
}

我尝试了一些官方文档中的方法,但cakepp抛出了一个错误(这两个表不相关)。现在JSON字符串包含一个空的pictures=[]数组。有人知道我如何在JSON响应中检索图片列表吗?

我想有两种方法可以做到这一点。要么声明一个显式外键。或者使用普通sql代替cakephp。正如你所说,你没有修改的奢侈,我敢打赌采用sql方式会更好。