Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Итак, потратив на все это дело несколько дней, я таки все настроил и ознакомился с кучей подводных камней. Решил весь процесс описать, чтобы сэкономить кому-нибудь время.
После установки и настройки лары на ubuntu, ставим пакет freetds
apt-get install freetds-bin
и адаптер для подключения его к php sybase
apt-get install php5-mssql
P.S. репозиторий иногда может быть недоступным, просто подождите.
Далее перезагружаем apache
service apache2 restart
И идем в /etc/freetds, открываем файл настроек freetds.conf
В конец добавляем
[MYMSSQLSERVER]
host = #ip адрес хоста на котором стоит mssql
client charset = UTF-8 # Для того, чтобы freetds конвертировал все в UTF-8
tds version = 7.2 # Версия протокола TDS, ставим меньше в зависимости от версии вашего MSSQL сервера, у меня это 2014
# Далее, в зависимости от того, идет у вас подключение через порт или инстанс, вбиваем одну из след. настроек, но НЕ КОМБИНИРУЕМ их
port = # ваш порт, по дефолту это 1433
instance = # название вашего инстанса, то есть, если полный адрес вашего сервера "10.10.10.10/MSSERVER", значит ваш инстанс MSSERVER
Сохраняем конфиг и выходим, все freetds мы настроили.
Теперь в ларе(на примере версии 4.2) переходим в настройки баз данных(/app/config/database.php) и вводим след. настройки
'default' => 'sqlsrv', //Естественно выставляем использование MSSQL по дефолту
'sqlsrv' => array(
'driver' => 'sqlsrv',
'host' => '', //Здесь вводим название нашей конфигурации из конфига freetds, для меня это MYMSSQLSERVER
'database' => '', //Какую БД использовать
'username' => '', //Имя пользователя(проверьте есть ли у него права доступа к выбранной БД)
'password' => ', //Пароль
'prefix' => '',
),
Все, лара настроена и готова к работе с удаленным MSSQL сервером. Дальше я разберу пару подводных камней.
Если массив данных из таблицы возвращается кракозябрами, то конвертируем его в UTF-8 с помощью функции, к сожалению более адекватного решения этой проблемы я пока не нашел.
public static function utf8_converter($array)
{
array_walk_recursive($array, function(&$item, $key){
if(!mb_detect_encoding($item, 'utf-8', true)){
$item = utf8_encode($item);
}
});
return $array;
}
Далее, могут возникать ошибки инсерта, если БД вы сгенерировали не с помощью лары, то в поля timestamps в ней отсутствуют. Просто вырубаем их в нужной модели:
public $timestamps = false;
На этом пока все, если встречу еще что-то тему дополню.
Почему бы вам не оформить это в виде статьи и не выложить на сайт?
https://laravel.ru/compose
Не в сети
Можно, но чуть позже, сейчас я все еще занимаюсь этим проектом, как только доделаю, тогда имеет смысл, ибо я уверен что еще что-нибудь да вылезет.