Работает ли CakePHP finderQuery с SQL Server?Где бы я это отладил? - PullRequest
6 голосов
/ 25 мая 2011

Я новичок в cakePHP, поэтому я могу упустить очевидное.

Система выполняет последнюю загрузку с использованием Microsoft SQL Server 2005 в качестве базы данных. Я понимаю, что это немного необычно, но исправив переписывание URL, я не видел других проблем.

Я бы хотел использовать пользовательский finderQuery, но я даже не могу заменить его по умолчанию. В частности, если я использую

    var $hasMany = array(
        'RecyclateTypeConversion' => array(
        'className' => 'RecyclateTypeConversion',
        'foreignKey' => 'recyclate_type_id',
        'dependent' => false,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'exclusive' => '',
        'finderQuery' => 'select RecyclateTypeConversion.* from recyclate_type_conversions AS RecyclateTypeConversion WHERE RecyclateTypeConversion.recyclate_type_id IN ({$__cakeID__$});',
        'counterQuery' => ''
    ),
     };

Я вижу эту ошибку

Примечание (8): неопределенный индекс: RecyclateTypeConversion [CORE \ пирог \ ЛИЭС \ модель \ Источники данных \ dbo_source.php, строка 1099]

Однако выходные данные отладки SQL подтверждают, что сам запрос выполняется нормально и возвращает 4 записи, а представление отлично работает, когда finderQuery не указан. Я пробовал и для других таблиц hasMany - с точно такой же проблемой.

Я пытался заменить select all определенными полями, но я все еще вижу тот же результат. Конечно, запрос выглядит правильно в соответствии с руководством - так в чем же проблема (и может ли это быть связано с использованием MSSQL?)

РЕДАКТИРОВАТЬ: Кроме того, так как это еще не получило никаких ответов, что будет лучшим подходом к отладке этого? Я начал охотиться в классе отладки тортов, но пока без результатов, которые меня просветили. Конечно, если возникнет проблема, я отправлю исправление обратно в проект.

Ответы [ 4 ]

2 голосов
/ 02 июня 2011

Попробуйте удалить псевдоним из выбора - приведение в части "AS RecyclateTypeConversion" должно обработать это для вас.Мне также нравится заключать пользовательские запросы в двойные кавычки.Я могу быть просто параноиком, но ошибки синтаксического анализа строк уже задевали меня в задницу.

var $hasMany = array(
    'RecyclateTypeConversion' => array(
    'className' => 'RecyclateTypeConversion',
    'foreignKey' => 'recyclate_type_id',
    'dependent' => false,
    'finderQuery' => "select * from recyclate_type_conversions AS RecyclateTypeConversion WHERE RecyclateTypeConversion.recyclate_type_id IN ({$__cakeID__$});",
);

Кроме того, я настоятельно рекомендую вам использовать плагин DebugKit и публиковать обратно нам журнал запросов и выходные данные отладкинайти результаты, которые вызывают ошибки.

2 голосов
/ 30 мая 2011

Проверяли ли вы, что на самом деле существует модель с именем RecyclateTypeConversion и что она существует с именем файла в соответствии с соглашениями CakePHP? То есть есть ли models/recyclate_type_conversion.php, и в этом файле имя модели определено как RecyclateTypeConversion.

Ошибка, которую вы получаете, намекает на то, что с именем этой модели что-то не так, поскольку она не может найти связанный индекс.

1 голос
/ 01 июня 2011

ты прошел через это шаг за шагом?

  1. попытаться получить все (все данные)
  2. Попробуйте условия
  3. попробуйте "сдерживаемое" поведение, чтобы создать свой запрос, что, на мой взгляд, значительно упрощает процесс мышления
0 голосов
/ 30 мая 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...