В настоящее время я работаю над простым приложением CRUD для работы и столкнулся с проблемой с BLOB и CLOB. Я не могу выполнять какие-либо запросы с любым столбцом этого типа. Мне также не разрешено отбрасывать или изменять их. Ошибка, которую я получаю, это ошибка SQL:
[IBM][CLI Driver] CLI0005W Option value changed
. Насколько я понимаю, я получаю эту ошибку, потому что драйвер не понимает, что такое блоб.
Я попытался преобразовать это в varchar, и он работает без красноречия, но моя компания хочет, чтобы это было сделано с использованием красноречия (поскольку у меня уже есть CRUD API, отлично работающий с MySQL, но он не содержит BLOB или CLOB).
Этот подход отлично работает:
$conn = odbc_connect('example','username','password');
$query = "SELECT cast(BLOB_COLUMN as varchar(32000)) FROM TABLE fetch first 1 row only";
$stmt = odbc_prepare($conn , $query);
odbc_execute($stmt);
while($driver = odbc_fetch_array($stmt)){
$drivers[] = $driver;
}
return $drivers;
}
Но я не могу реализовать что-то подобное с красноречием. Я пробовал литье так: Модель
protected $casts = [
'BLOB_COLUMN' => 'string',
'CLOB_COLUMN' => 'string',
];
Контроллер (все записи)
public function allRecords() {
$data = Model::all();
return $data;
}
Маршрут:
Route::get('model', 'ModelController@allRecords');
Любая помощь будет принята с благодарностью. Примечание: я надеюсь, что объяснил это достаточно подробно, так как я программировал чуть меньше года в колледже и начал PHP/Laravel менее месяца назад.
Вы можете просто использовать свой sql-запрос в laravel
Model::select(DB::raw('cast(BLOB_COLUMN as varchar(32000))'))
->first();
Кажется, он возвращает ложные значения вместо ошибки, с которой я мог бы работать. Новая функция: php public function allRecords() { $data = Model::select(DB::raw('CAST(BLOBCOLUMN AS varchar(32000)) + CAST(CLOBCOLUMN AS varchar(32000))'))->get(); return $data; }
Новый вывод: php [{"1":null},{"1":null},{"1":null}]
Поцарапайте это, кажется, это работает так, как задумано! Я просто не правильно понял на первый взгляд. Большое спасибо ! Теперь время поработать над этим :)
Драйвер ibm_db2 действительно понимает, что такое LOB, у него есть специальный метод для чтения данных LOB, но похоже, что ваша структура ORM не оборудована для его использования.