Преобразовать в запрос Cakephp с помощью подзапроса - PullRequest
0 голосов
/ 16 июля 2011

Кто-нибудь знает, как преобразовать этот запрос:

SELECT * из diminventory, где partnumber = '350964-B22' или номер компонента в (SELECT partnumber из dimparts, где parentpartnumber = '350964-b22')

в запросе CakePHP

Спасибо

Ответы [ 3 ]

0 голосов
/ 16 июля 2011

Он запрашивает запрос Cakephp, а не пользовательский запрос SQL. В контроллере:

$partnumber = $this->diminventory->find('all',array('conditions' => array('diminventory.partnumber' => '350964-B22')));
$this->set('partnumber',$partnumber);

Функция set передает переменную в виде $ partnumber в представление. Затем в int view (который является .ctp-файлом) вам нужно вывести массив.

foreach($partnumber as $partnumbers){
echo $partnumbers;
}

Убедитесь, что в таблице diminventory есть 's' после имени, иначе она не будет работать, поскольку это является частью строгих соглашений Cakephp об именах.

Учебник для функции поиска: http://book.cakephp.org/view/1018/find

0 голосов
/ 17 июля 2011

Чтобы сделать это полностью Cake'ish, вам нужно использовать CakePHP подзапрос :

$dbo = $this->User->getDataSource();
$subQuery = $dbo->buildStatement(
    array(
        'fields' => array('`Dimpart`.`partnumber`'),
        'table' => $dbo->fullTableName($this->Dimpart),
        'alias' => 'Dimpart',
        'conditions' => array('`Dimpart`.`parentpartnumber`' => '350964-b22'),
    ),
    $this->Dimpart
);

$subQuery = ' `DiminventoryEntry`.`partnumber` IN (' . $subQuery . ') ';
$subQueryExpression = $dbo->expression($subQuery);

$conditions[] = $subQueryExpression;
$conditions['DiminventoryEntry.partnumber'] = '350964-B22';

$result = $this->DiminventoryEntry->find('all', compact('conditions'));

Где Dimpart - ваша модель для таблицы dimparts, а DiminventoryEntry - ваша модель для таблицы diminventory (которая на самом деле не Cake'ish, вы должны были переименовать вашу таблицу в соответствии с соглашениями ).

0 голосов
/ 16 июля 2011

Я пока не уверен на 100%, что вы просите, но вот краткое руководство по запросам на CakePHP.

$this->ModelName->query("SELECT * FROM tablename LIMIT 2;");

Вы запрашиваете модель, но используете буквальное имя таблицы.Вы используете ключевое слово SQL «AS» для переименования ключей результирующего массива.

Пример результатов:

Array
(
    [0] => Array
        (
            [tablename] => Array
                (
                    [id] => 1304
                    [user_id] => 759
                )
        )

    [1] => Array
        (
            [tablename] => Array
                (
                    [id] => 1305
                    [user_id] => 759
                )
        )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...