В контроллере найдите находку, определяющую основные условия, но запрос, созданный cakephp, не соответствует условиям - PullRequest
0 голосов
/ 10 мая 2018

В контроллере:

$budget = $this->Budget->find('first',
        array('conditions' => array(
                "copros_id" => $this->Session->read('Copro.id'),
                "typebudgets_id" => $typebudget['Typebudget']['id'],
                "exercices_id" => $this->Session->read('Exercice.id'))));

создает sql:

SELECT `Budget`.`id`, 
       `Budget`.`created`, 
       `Budget`.`modified`, 
       `Budget`.`title`, 
       `Budget`.`statusbudgets_id`, 
       `Budget`.`typebudgets_id`, 
       `Budget`.`copros_id`, 
       `Budget`.`visible`, 
       `Budget`.`exercices_id` 
FROM `default_schema`.`budgets` AS `Budget` 
WHERE `Budget`.`typebudgets_id` = ('466b50a5-4736-11e6-a160-00163ee3b504')  

Модель содержит:

public $belongsTo = array(
  'StatusBudget' => array(
    'className' => 'StatusBudget',
    'foreignKey' => 'statusbudgets_id'
   ),   
  'Exercice' => array(
    'className' => 'Exercice',
    'foreignKey' => 'exercices_id'
   ),
  'Typebudget' => array(
    'className' => 'Typebudget',
    'foreignKey' => 'typebudgets_id'
   ),   
  'Copro' => array(
    'className' => 'Copro',
    'foreignKey' => 'copros_id'
   ),   
);  

Похоже, что условия в find игнорируются cakephp (2) при построении запроса; указание разных условий в find дает тот же sql в результате. Как будто условия не имеют значения на самом деле. Странно (для меня). Спасибо

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Размышляя об ответе Ильи Пандиа, я попытался точнее указать мои условия:

   $budget = $this->Budget->find('first',
            array('conditions' => array(
                    "Budget.copros_id" => $this->Session->read('Copro.id'),
                    "Budget.typebudgets_id" => $typebudget['Typebudget']['id'],
                    "Budget.exercices_id" => $this->Session>read('Exercice.id'))));

Сгенерированный sql - это то, что я ожидал:

SELECT `Budget`.`id`, ... 
FROM `default_schema`.`budgets` AS `Budget` 
  LEFT JOIN `default_schema`.`status_budgets` AS `StatusBudget` ON (`Budget`.`statusbudgets_id` = `StatusBudget`.`id`) 
  LEFT JOIN `default_schema`.`exercices` AS `Exercice` ON (`Budget`.`exercices_id` = `Exercice`.`id`) 
  LEFT JOIN `default_schema`.`typebudgets` AS `Typebudget` ON (`Budget`.`typebudgets_id` = `Typebudget`.`id`) 
  LEFT JOIN `default_schema`.`copros` AS `Copro` ON (`Budget`.`copros_id` = `Copro`.`id`) 

ГДЕ Budget. copros_id = '5af2bda8-97d0-403a-ad96-4cf1ac171864' AND Budget. typebudgets_id = '466b50a5-4736-11e6-a160-00163ee3b504' AND Budget. exercices_id = '5af2c13b-43d0-412f-97d9-4752ac171864' LIMIT 1

Спасибо!

0 голосов
/ 10 мая 2018

Здесь может происходить несколько вещей:

  1. Сначала попытайтесь очистить кэш модели.Если вы не знаете, как пользоваться консолью Cake, просто удалите файлы в папках / tmp / cache / model.

  2. В таблице за моделью Budget НЕ содержитсястолбцы, на которые вы делаете ссылку.Или в их названии есть опечатка.В этом случае Cake не будет использовать их при построении ваших условий.

  3. В таблице БД для budget есть все необходимые столбцы, кроме таблицы class определено, что может помешать правильному чтению структуры таблицы из базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...