Cakephp 3如何在where子句中访问深度包含关联?

nnsrf1az  于 2022-11-11  发布在  PHP
关注(0)|答案(1)|浏览(137)

我在使用Cakephp 3.3时遇到了一个问题,我不知道如何在where子句中使用contain来访问链接数据。
请求如下:

$cables = TableRegistry::get('cable_schedule');

    $cablemark = 'test1';
    $equipement = 'test2';
    $compartment = 'test3';
    $system = 'test4';

    $query = $cables->find('all')->contain(['CableType', 'Contract', 'EquipementSource' => ['Compartment', 'System'], 'EquipementDest' => ['Compartment', 'System']])
        ->where(['EquipementSource.Description like' => '%'.$equipement.'%'])
        ->orWhere(['EquipementDest.Description like' => '%'.$equipement.'%'])
        ->andWhere(['Cable_Mark like' => '%'.$cablemark.'%'])
        ->andWhere(['EquipementSource.Compartment.Description like' => '%'.$compartment.'%'])
        ->orWhere(['EquipementDest.Compartment.Description like' => '%'.$compartment.'%'])
        ->andWhere(['EquipementSource.System.Description like' => '%'.$system.'%'])
        ->orWhere(['EquipementDest.System.Description like' => '%'.$system.'%']);

    $this->set('cables', $query);

错误为:
状态[42S22]:未找到列:1054“where子句”中的未知列“设备目标系统说明”

jvlzgdj9

jvlzgdj91#

您需要使用matching()方法(请参阅CakePHP手册)。
例如,如果您有数据表出版项,而且它有许多标记,您可以筛选结果如下:

$query = $articles->find();
$query->matching('Tags', function ($q) {
    return $q->where(['Tags.name' => 'CakePHP']);
});

相关问题