Как я могу кратко вернуть первый результат в запросе Code Igniter? - PullRequest
4 голосов
/ 20 марта 2012

Я попытался вернуть объект, представляющий журнал, полученный на основе его идентификатора в модели.

public function getJournal($id) {
    $query = $this->db->query("SELECT * FROM journals WHERE id='$id'");
    return ($query->num_rows() == 1) ? ($query->result())[0] : NULL;
}

Однако PHP выдает ошибку, объявляющую неожиданную открытую правую скобку ([).

Я закончил цикл по массиву 1 объектной сущности, чтобы вернуть его, что глупо, но работает.

public function getJournal($id) {
    $query = $this->db->query("SELECT * FROM journals WHERE id='$id'");
    if ($query->num_rows() == 1) {
        foreach ($query->result() as $journal)
            return $journal;
    }
    else
        return NULL;
}

Что является более кратким способом вернуть этот объект?

Ответы [ 4 ]

8 голосов
/ 20 марта 2012

Вместо захвата result(), просто используйте метод row():

$first_result = $query->row();
3 голосов
/ 20 марта 2012
public function getJournal($id)
{
    return $this->db->where('id', $id)->get('journals')->row() ?: NULL; // (requires PHP 5.3)
}
1 голос
/ 20 марта 2012
public function getJournal($id) {
    $id = (int) $id;
    $query = $this->db->query("SELECT * FROM journals WHERE id = $id limit 1");
    if ($query->num_rows() == 1) {
        return $query->row();
    }
    return NULL;
}
1 голос
/ 20 марта 2012

Во-первых, вы должны ограничить свой запрос до 1:

SELECT * FROM journals WHERE id='$id' LIMIT 1

Во-вторых, причина, по которой он заявил, что была неожиданная открытая правая скобка.Это потому, что метод результата в codeigniter возвращает объект, а не массив.Вы можете использовать ->result_array();, если хотите этого ... но если вы решили ограничить до 1, вы также можете вернуть объект ...

Удачи

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