Решил проблему, изменив метод в модели:
public function get_posts_by_author($authorid) {
$this->db->select('posts.*,categories.name as post_category');
$this->db->order_by('posts.id', 'DESC');
$this->db->join('categories', 'posts.cat_id = categories.id', 'inner');
// the line below was changed
$query = $this->db->get_where('posts', array('posts.author_id' => $authorid));
return $query->result();
}
Распаковывание только работает, если тип идентичен! Вы не можете распаковать object
, который не содержит целевое значение. То, в чем Вы нуждаетесь, является чем-то вроде
decimal tmpvalue;
decimal? result = decimal.TryParse((string)value, out tmpvalue) ?
tmpvalue : (decimal?)null;
, Это смотрит, parsable ли значение как decimal
. Если да, то присвойте его result
; еще присвойтесь null
. Следующий код делает приблизительно то же и мог бы быть легче понять для людей, не знакомых с условным оператором ?:
:
decimal tmpvalue;
decimal? result = null;
if (decimal.TryParse((string)value, out tmpvalue))
result = tmpvalue;
и если Вы используете decimal? temp = (decimal?)value;
необходимо проанализировать десятичное число. Но если Вы хотите, чтобы Ваше десятичное число было пустым, когда строка не корректна, используйте TryParse:
decimal parsedValue;
decimal? temp = decimal.TryParse(value, out parsedValue)
? value
: (decimal?)null;
Этот путь Вы избежите исключений при парсинге плохо форматированных строк.
Почти все типы примитивов предоставляют методы Синтаксического анализа и TryParse для преобразования из строки.
, также рекомендуется передать культуру для аргумента поставщика методу для предотвращения проблем с десятичным разделителем. Если Вы читаете из другой системы, CultureInfo. InvariantCulture является, вероятно, способом пойти (но это не значение по умолчанию).
bool TryParse(string s, NumberStyles style,
IFormatProvider provider, out decimal result)