تعطيل الفهرس التلقائي على معرف الكائن ذي الصلة من YML
-
26-09-2019 - |
سؤال
تقوم العقيدة تلقائيًا بإنشاء فهارس على الأعمدة المستخدمة لتحديد علاقات الكائنات ،
علي سبيل المثال
المستخدم: معرف ، الاسم
الرسالة: ID ، sender_id ، receiver_id ، رسالة
إذا قمت بتحديد العلاقة بين الرسالة والمستخدم بطريقة تحتوي هذه الرسالة على مرسل واحد ولديها جهاز استقبال واحد ، فسيقوم العقيدة تلقائيًا بفهرسة الحقول Sender_id و Receiver_id عندما أقوم بإنشاء SQL من النموذج. أرغب في تعطيل الفهرس على المرسل ، لأنني أقوم بإنشاء فهرس يدويًا مع Sender_id ومعرف المتلقي معًا. كيف يمكنني تعطيل الفهرس الذي تم إنشاؤه التلقائي؟
المحلول
مرحبًا ، افترضت أنك كنت تستخدم MySQL ، وألقيت نظرة في العقيدة/التصدير/mysql.php وجدت هذا:
// 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()));
}
}
}
}
إذا فهمت بشكل صحيح ، فإن تعطيل الفهرس يجب أن يكون جزءًا من المفتاح الأساسي.
لا تنتمي إلى StackOverflow