Problem with complex query and ORM several tables involved

I am adapting a query to cakephp 3, the original query, it works returns one or more marriages or nothing if there is no concidence

Original Query:

select
if(a1.id != 151, p1.id, p2.id) as id, 
if(a1.id != 151, p1.nombre, p2.nombre) as nombre,
if(a1.id != 151, p1.genero, p2.genero) as genero,
if(a1.id != 151, p1.imagen_id, a2.imagen_id) as imagen,
if(a1.id != 151, p1.primer_apellido, ,p2.primer_apellido) as primer_apellido,
if(a1.id != 151, p1.segundo_apellido, p2.segundo_apellido) as segundo_apellido,
ifnull(date_format(m.fecha, '%d/%m/%Y'), 'no consta fecha') as fecha_matrimonio
from matrimonios m, Personas p1, Personas p2
where a1.id = m.idhombre 
and a2.id = m.idmujer
and (m.idhombre = 151 or m.idmujer = 151 )
order by fecha

He tried to adapt the query with Cakephp’s ORM:

$conyuges = TableRegistry::get('Personas')->find('all', [ 'contain' => ['Matrimonios']])
                                            ->join(['Imagenes' => [
                                                                   'table' => 'imagenes',
                                                                   'type' => 'LEFT',
                                                                   'conditions' => 'Imagenes.id = imagen_id'
                                                                  ]
                                                   ])
                                            ->join(['Personas2' => [
                                                                    'table' => 'personas',
                                                                    'type' => 'LEFT',
                                                                    'conditions' => 'Personas2.id = Personas.id'
                                                                   ]
                                                    ])
                                           ->join(['Matrimonios' => [
                                                                          'table' => 'matrimonios',
                                                                          'type' => 'LEFT',
                                                                          /*'conditions' => 'MatrimoniosH.idhombre = '.$id*/
                                                                      ]
                                                     ])
                                            ->select([
                                                      'id' => 'if(Personas.id != '.$id.', Personas.id, Personas2.id)',
                                                      'nombre' => 'if(Personas.id != '.$id.', Personas.nombre, Personas2.nombre)',
                                                      'genero' => 'if(Personas.id != '.$id.', Personas.genero, Personas2.genero)',
                                                      'foto' => 'if(Personas.id != '.$id.', Personas.imagen_id, Personas2.imagen_id)',
                                                      'primer_apellido' => 'if(Personas.id != '.$id.', Personas.primer_apellido, Personas2.primer_apellido)',
                                                      'segundo_apellido' => 'if(Personas.id != '.$id.', Personas.segundo_apellido, Personas2.segundo_apellido)',
                                                      'fecha_matrimonio' => 'if(Matrimonios.fecha is null, Matrimonios.fecha, "no consta fecha")'
                                                  ])
                                                ->where([
                                                         'Personas.id' => 'Matrimonios.idhombre',
                                                         'Personas2.id' => 'Matrimonios.idmujer',
                                                         '(Matrimonios.idhombre = '.$id.' or Matrimonios.idmujer = '.$id.')'])
                                                ->orderAsc('fecha_matrimonio');

And it returns me:

SELECT 
Personas.id AS Personas__id, 
Personas.orden AS Personas__orden, 
Personas.nombre AS Personas__nombre, 
Personas.primer_apellido AS Personas__primer_apellido, Personas.segundo_apellido AS Personas__segundo_apellido, 
Personas.poblacion_id AS Personas__poblacion_id, 
Personas.fnacimiento AS Personas__fnacimiento, 
Personas.ffallecimiento AS Personas__ffallecimiento, 
Personas.comentarios AS Personas__comentarios, 
Personas.imagen_id AS Personas__imagen_id, 
Personas.idpadre AS Personas__idpadre, 
Personas.idmadre AS Personas__idmadre, 
Personas.genero AS Personas__genero, 
Personas.soltero AS Personas__soltero, 
Personas.casa_id AS Personas__casa_id, 
Personas.muerto AS Personas__muerto, 
if(Personas.id != 151, Personas.id, Personas2.id) AS id, 
if(Personas.id != 151, Personas.nombre, Personas2.nombre) AS nombre, if(Personas.id != 151, Personas.genero, Personas2.genero) AS genero, if(Personas.id != 151, Personas.imagen_id, Personas2.imagen_id) AS foto, if(Personas.id != 151, Personas.primer_apellido, Personas2.primer_apellido) AS primer_apellido, 
if(Personas.id != 151, Personas.segundo_apellido, Personas2.segundo_apellido) AS segundo_apellido, 
if(Matrimonios.fecha is null, Matrimonios.fecha, "no consta fecha") AS fecha_matrimonio 
FROM personas Personas 
LEFT JOIN imagenes Imagenes ON Imagenes.id = imagen_id 
LEFT JOIN personas Personas2 ON Personas2.id = Personas.id 
LEFT JOIN matrimonios Matrimonios ON 1 = 1 
WHERE (Personas.id = Matrimonios.idhombre 
AND Personas2.id = Matrimonios.idmujer 
AND (Matrimonios.idhombre = 151 or Matrimonios.idmujer = 151)) 
ORDER BY fecha_matrimonio ASC

Warning (4096): Argument 1 passed to Cake\Database\Expression\QueryExpression::_addConditions() must be of the type array, null given, called in /srv/www/cake-arbol/vendor/cakephp/cakephp/src/Database/Expression/QueryExpression.php on line 171 and defined [CORE/src/Database/Expression/QueryExpression.php, line 681]

Warning (2): Invalid argument supplied for foreach() [CORE/src/Database/Expression/QueryExpression.php, line 687]

Add info

PersonasTable:

  $this->hasMany('Matrimonios', [
            'className' => 'Matrimonios',
            'foreignKey' => ['OR' => [
                                      'idhombre',
                                      'idmujer'
                                     ]
                            ]
      ]);

MatrimoniosTable:

$this->belongsTo('Personas', [
          'className' => 'Personas',
          'foreignKey' => ['OR' => [
                                    'idhombre',
                                    'idmujer'
                                   ]
                          ]
        ]);