#php #kohana #kohana-3 #kohana-db
#php #kohana #kohana-3 #kohana-db
Вопрос:
Я только начал использовать фреймворк 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];
и это сработало бы; но я думаю, что это просто совершенно глупо, поскольку я использую фреймворк, и для этого должны быть встроенные методы.
Комментарии:
1. кстати, вам пригодится отличная официальная документация о DB-модуле в ko3: kohanaframework.org/3.0/guide/database
Ответ №1:
Вы должны знать, что на самом деле вы создаете объект Database_Query, поэтому в конце должно быть что-то, что его выполнит, верно?
$results = DB::select('*')->from('table')->execute();
и затем вы можете обычно перебирать эти:
foreach ($results as $result) { echo $result->id; }
Комментарии:
1. Я пытался запустить ваш код, но получаю эту ошибку ErrorException [ Уведомление]: Попытка получить свойство не-объекта
Ответ №2:
После того, как вы создали запрос, вам нужно будет преобразовать его в 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'];
}
Комментарии:
1. Кроме того, если вы используете Database_Query::as_object() перед Database_Query::execute(), Database_Result::current() вернет объект вместо массива, а Database::as_array() вернет массив объектов.
Ответ №3:
Чтобы получить строку:
$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();