Deaktivieren Sie die automatische Index auf ähnliche Objekt-ID aus yml
-
26-09-2019 - |
Frage
Lehre erstellt automatisch Indizes für Spalten, die verwendet werden Objektbeziehungen zu definieren,
Zum Beispiel
Benutzer: id, name
Nachricht: id, SENDER_ID, receiver_id, Nachricht
wenn ich Beziehung zwischen Nachricht und Benutzern in einer Art und Weise definiere die Nachricht einen Sender und hat einen Empfänger, Lehre automatisch Index SENDER_ID und receiver_id Felder, wenn ich generieren SQL von Modell. Ich würde zu deaktivieren Index für Absender mag, weil ich manuell Index mit SENDER_ID und Empfänger-ID erstellen zusammen. Wie kann ich deaktivieren automatisch generierten Index?
Lösung
Hallo ich davon ausgegangen Sie MySQL verwendet haben, und warf einen Blick in Lehre / Export / mysql.php Ich fand diese:
// build indexes for all foreign key fields (needed in MySQL!!)
if (isset($options['foreignKeys'])) {
foreach ($options['foreignKeys'] as $fk) {
$local = $fk['local'];
$found = false;
if (isset($options['indexes'])) {
foreach ($options['indexes'] as $definition) {
if (is_string($definition['fields'])) {
// Check if index already exists on the column
$found = $found || ($local == $definition['fields']);
} else if (in_array($local, $definition['fields']) && count($definition['fields']) === 1) {
// Index already exists on the column
$found = true;
}
}
}
if (isset($options['primary']) && !empty($options['primary']) &&
in_array($local, $options['primary'])) {
// field is part of the PK and therefore already indexed
$found = true;
}
if ( ! $found) {
if (is_array($local)) {
foreach($local as $localidx) {
$options['indexes'][$localidx] = array('fields' => array($localidx => array()));
}
} else {
$options['indexes'][$local] = array('fields' => array($local => array()));
}
}
}
}
Wenn ich es richtig verstehe, den Index zu deaktivieren, sollte ein Teil der Primärschlüssel sein.