Ищите «самый удобный» способ чтения ровно одной записи из базы данных (codeigniter) - PullRequest
2 голосов
/ 25 ноября 2011

Описанный выше вопрос нельзя считать «высокоприоритетным», но он все еще беспокоит меня.

Допустим, мне нужно получить данные из базы данных.И я точно знаю, что данные есть, потому что, если бы это было не так, все приложение было бы повреждено.Но я не пытаюсь прочитать «набор результатов», просто ОДИН результат.Так какой же самый «лучший» способ добиться этого?

Мое приложение построено на основе codeigniter , и благодаря использованию активных записей это лучшее, что я когда-либо придумал:

$result = $this->db->from('some_table')->where('id',$id)->get()->result();
$record = $result[0];

Я знаю, что мог бы спроектировать запрос немного по-другому (и, возможно, короче), например, используя get_where (...), но в конце концов он все равно был бы «двухслойным».Это может быть «роскошной» проблемой, но я ненавижу «внешний вид» этого кода.Есть ли способ сделать это «однострочным»?

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

Ваше мнение очень ценится!

Ответы [ 4 ]

6 голосов
/ 25 ноября 2011

CI родным способом:

$record = $this->db->from('some_table')->where('id',$id)->get()->row();

И вы готовы идти.

РЕДАКТИРОВАТЬ

Даже аккуратнее:

$record = $this->db->get_where('some_table', "id = '$id'")->row();

'$id' не должно быть в кавычках, если значение является целым числом, как здесь, хотя.

1 голос
/ 25 ноября 2011

вместо

$result = $this->db->from('some_table')->where('id',$id)->get()->result();
$record = $result[0];

использование

$record = reset($this->db->from('some_table')->where('id',$id)->get()->result());

То же самое можно использовать для получения первого ПОЛЯ первого ряда (работает, пока ваш кодировщик возвращает записи в виде массивов, я не знаю, потому что я никогда не использовал CI)

$firstfield = reset(reset($this->db->from('some_table')->where('id',$id)->get()->result()));

Приветствия

0 голосов
/ 25 ноября 2011

Хотя, глядя на альтернативы, иногда две строки лучше, чем одна ...

0 голосов
/ 25 ноября 2011

Использование array_slice():

$record = array_slice($this->db->from('some_table')->where('id',$id)->get()->result(), 0, 1);

Использование array_shift():

$record = array_shift($result = $this->db->from('some_table')->where('id',$id)->get()->result());

Использование reset():

$record = reset($this->db->from('some_table')->where('id',$id)->get()->result());

В PHP 5.4:

$record = $this->db->from('some_table')->where('id',$id)->get()->result()[0];

Мой личный фаворит по-прежнему array_slice(), поскольку он позволяет вам получить любой индекс, который вы хотите, не работает со ссылками и не меняет внутреннюю позицию указателя массива. Тем не менее, все эти решения требуют от вас выяснить, что произойдет, если $result не является массивом (при условии, что вы не хотите предупреждений).

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