2013-05-18 2 views
0

У меня есть cakephp для моего сайта. И я использую SQL Server 2012 с ним. я спутал, что, когда я использую:Ошибка при использовании пользовательского запроса в cakephp?

$this->set('types',$this->Manager->query('select * from product_types')); 

, чтобы получить массив всех моих видов продукции возвращение массив является:

Array 
(

    [0] => Array 
    (
     [0] => Array 
     (
      [id] => 1 
      [name] => hoa my pham 
     ) 
    ) 

    [1] => Array 
    (
     [0] => Array 
     (
      [id] => 2 
      [name] => hoa my 
     ) 

    ) 

) 

Почему имеет [0] вместо [product_types]? ???

+0

Более важный вопрос: почему с помощью CakePHP, когда вы не используете его для easierst задач под рукой - и очень простой запрос, который. Я настоятельно рекомендую использовать его по своему усмотрению - используя метод find() оболочки. И для ваших других вопросов: http://book.cakephp.org/ Все объяснено очень хорошо. – mark

+0

Yup, но я новичок в cakePHP, и у меня больше опыта написания T-SQL, поэтому я выбираю этот способ: D –

ответ

0

Это из документации CakePHP:

To use the model name as the array key, and get a result consistent with that returned by the Find methods, the query can be rewritten: 

$this->Picture->query("SELECT * FROM pictures AS Picture LIMIT 2;"); 

which returns: 

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

    [1] => Array 
    (
     [Picture] => Array 
     (
      [id] => 1305 
      [user_id] => 759 
     ) 
    ) 
) 

Так что вам нужно:

$this->set('types',$this->Manager->query('select * from product_types as Product_Types')); 

Источник: http://book.cakephp.org/2.0/en/models/retrieving-your-data.html

PS:

Этот синтаксис и соответствующий массив структура ure действует только для MySQL . Cake не предоставляет абстракции данных при выполнении запросов вручную, поэтому точные результаты будут различаться между базами данных.

+0

Я делаю это и не получаю удачи. Но я прочитал вашу ссылку и ** P.S ** - проблема для MSSQL SERVER :(Большое спасибо за ваш ответ –

+0

Возможно, не совместим с вашим драйвером db. Используйте другой способ построения запроса –

1

Пожалуйста, следуйте документации и учебным пособиям.

Тогда вы сможете использовать только

$this->set('managers', $this->Manager->find('all')); 

по той же самой вещи - используя чистый подход с функциями обертку и источника данных SQL Server.

Для SqlServer должен быть доступен источник данных, например: https://github.com/cakephp/datasources/blob/2.0/Model/Datasource/Database/Sqlsrv.php

Смежные вопросы