Mysql
 sql >> Datenbank >  >> RDS >> Mysql

UNION-Syntax in Cakephp

Zu viele Programmierer versuchen, sich auf die Funktionalität eines Frameworks zu beschränken. NICHT. Verwenden Sie, was das Framework bietet. Wenn es nicht die gewünschte Funktionalität hat, dann entweder:

  • Codieren Sie die benötigte Funktionalität in eine Klassenerweiterung

oder

  • Drehen Sie den Code innerhalb des Frameworks nach Ihren Wünschen.

Oftmals versuchen Entwickler, einen quadratischen Stift in ein rundes Loch zu hämmern und am Ende viel zu viel zusätzliche Arbeit zu leisten, die den Code wirklich nur komplizierter macht. Treten Sie einen Schritt zurück und fragen Sie, warum Sie das Framework überhaupt verwenden. Es bringt Struktur in eine unstrukturierte Sprache. Es bietet eine solide, wiederverwendbare Grundlage, auf der Sie Ihre Anwendung aufbauen können. Es soll keine Box sein, in die man sich hineinstecken und eingeschränkt werden kann.

UPDATE:Ich habe mir eine Minute Zeit genommen, um Komplexe Suchbedingungen und deine Antwort gefunden:

$joins = array(
    array(
        'table' => 'test_twos',
        'alias' => 'TestTwo',
        'type' => 'LEFT',
        'conditions' => array(
            'TestTwo.id = TestOne.id',
        )
    ),
    array(
        'table' => 'test_threes',
        'alias' => 'TestThree',
        'type' => 'LEFT',
        'conditions' => array(
        'TestThree.id = TestOne.id',
    )
    )
);

$dbo = $this->getDataSource();
$subQuery = $dbo->buildStatement(
    array(
        'fields' => array('*'),
        'table' => $dbo->fullTableName($this),
        'alias' => 'TestOne',
        'limit' => null,
        'offset' => null,
        'joins' => $joins,
        'conditions' => null,
        'order' => null,
        'group' => null
    ),
    $this->TestOne
);
$query = $subQuery;

$query .= ' UNION ';
$joins = array(
    array(
        'table' => 'test_twos',
        'alias' => 'TestTwo',
        'type' => 'LEFT',
        'conditions' => array(
            'TestTwo.id = TestOne.id',
        )
    ),
    array(
        'table' => 'test_threes',
        'alias' => 'TestThree',
        'type' => 'RIGHT',
        'conditions' => array(
        'TestThree.id = TestOne.id',
        )
    )
);

$dbo = $this->getDataSource();
$subQuery = $dbo->buildStatement(
    array(
    'fields' => array('*'),
    'table' => $dbo->fullTableName($this),
    'alias' => 'TestOne',
    'limit' => null,
    'offset' => null,
    'joins' => $joins,
    'conditions' => null,
    'order' => null,
    'group' => null
    ),
    $this->TestOne
);

$query .= $subQuery;

pr($query);