sql >> Database >  >> RDS >> Mysql

CakePHP- en HABTM-modellimietfout

waarom gebruikt u niet het bevat gedrag

// you would probably want the next line in the app_model ot be able to use it with all models
$this->Post->actsAs = array('Containable')
$params['conditions'] = array(
);
$params['contain'] = array(
    'Media' => array(
        'fields' => array(
            'type', 'path', 'title'
        ),
        'limit' => 1
    )
);
$this->Post->find('all', $params);

BEWERKEN:

Ik heb dat net geprobeerd en kreeg deze sql (Module <-> Tag):

SELECT `Module`.`id` FROM `modules` AS `Module` WHERE 1 = 1 

en

SELECT `Tag`.`id`, `ModulesTag`.`module_id`, `ModulesTag`.`tag_id` 
FROM `tags` AS `Tag` 
JOIN `modules_tags` AS `ModulesTag` 
  ON (`ModulesTag`.`module_id` IN (1, 2, 3, 4) AND `ModulesTag`.`tag_id` = `Tag`.`id`) 
WHERE `Tag`.`belongs_to` = 'Module' 
ORDER BY `Tag`.`name` ASC 
LIMIT 1

uiteraard kan dat niet het gewenste resultaat opleveren, aangezien u voor elk moduleresultaat een zoekopdracht zou moeten uitvoeren (wat dan weer zou resulteren in veel te veel zoekopdrachten).

Als conclusie zou ik alle tags retourneren (in mijn voorbeeld), omdat de overhead in te veel resultaatrijen beter is dan de overhead van te veel zoekopdrachten.



  1. Wat is de beste manier om rangen te genereren in MYSQL?

  2. SQL-query om de meest recente rij te krijgen voor elke instantie van een bepaalde sleutel

  3. Recursieve opmerkingen implementeren in PHP/MySQL

  4. Hex-waarden invoegen in MySql