Запрос к базе данных в Kohana показывает только SQL, а не строки результата - PullRequest
1 голос
/ 10 ноября 2011

Я только начал использовать инфраструктуру Kohana, и я пытаюсь выполнить несколько запросов, но после нескольких часов документации и выполнения некоторых тестов все, что у меня есть, это:

class Controller_Test extends Controller {
    public function action_index()
    {
       $query = DB::select()->from('test')->where('test', '=', '1');
       echo $query  
    }
}

Теперь, если попытаться запустить это все, что он делает, это повторить мой SQL.

Как я могу получить фактические данные из моей базы данных?Я знаю, что могу сделать что-то вроде:

$row = mysql_fetch_row(mysql_query($query));
echo $row[0];

, и это будет работать;но я думаю, это просто глупо, так как я использую фреймворк, и для этого должны быть встроенные методы.

Ответы [ 3 ]

5 голосов
/ 10 ноября 2011

Вы должны знать, что вы на самом деле строите объект Database_Query, поэтому в конце должно быть что-то для его выполнения, верно?

$results = DB::select('*')->from('table')->execute();

, и тогда вы можете нормально проходить через эти:

foreach ($results as $result) { echo $result->id; }

2 голосов
/ 10 ноября 2011

После того, как вы построите запрос, вам нужно будет превратить его в объект Database_Query, используя метод execute(), чтобы вы могли получить значения для запуска.

Если вы хотитеобрабатывать результаты запроса в виде массива, вы можете добавить метод as_array() после выполнения следующим образом:

$query = DB::select()->from('test')->where('test', '=', '1')
                     ->execute()->as_array();

Если вы работаете только с одной строкой и знаете толькоЕсли вам нужна отдельная строка, вы можете изменить ее на current():

$query = DB::select()->from('test')->where('test', '=', '1')
                     ->execute()->current();

Затем вы можете извлекать при необходимости при циклическом просмотре массива:

foreach ($query as $row)
{
    echo $row['title'];
}
0 голосов
/ 24 января 2014

Чтобы получить строку:

$query = DB::select('p.id')
            ->select_array(array('p.title', array('p.title', 'pocket') ))
            ->from(array($this->_table_name, 'p'))
            ->limit(1);

echo $query->execute()->get('id');

Показать запрос:

echo $query->compile();
...