Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 07.10.2019 11:09:28

Как вытащить комментарии из information_schema

Доброго времени суток!
Храню в комментариях столбцов таблицы MYSQL удобочитаемые названия столбцов для подмены (при отображении на странице), типа:

CREATE TABLE `v2_rees` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `UIN_rec_rees` text NOT NULL COMMENT 'Уникальный номер реестровой записи',
  `NUM_RU` text NOT NULL COMMENT 'Регистрационный номер',
  `date_of_reg` date NOT NULL COMMENT 'Дата государственной регистрации',
  `date_valid_to` date DEFAULT NULL COMMENT 'Срок действия удостоверения',
  `name` mediumtext NOT NULL COMMENT 'Наименование изделия',
  `name_of_applicant` text COMMENT 'Наименование организации-заявителя',
  `faddress_of_applicant` text COMMENT 'Место нахождения организации-заявителя',
  `uaddress_of_applicant` text COMMENT 'Юридический адрес организации-заявителя',
  `name_of_manufacturer` text COMMENT 'Наименование организации-производителя',
  `faddress_of_manufacturer` text COMMENT 'Место нахождения организации-производителя',
  `uaddress_of_manufacrurer` text COMMENT 'Юридический адрес организации-производителя',
  `okp_okpd2` tinytext COMMENT 'ОКП/ОКПД2',
  `class_of_risk` text COMMENT 'Класс потенциального риска',
  `destiny` text COMMENT 'Назначение изделия, установленное производителем',
  `type_of_classified` tinytext COMMENT 'Вид изделия в соответствии с номенклатурной классификацией',
  `address_of_manufactuty` text COMMENT 'Адрес места производства или изготовления',
  `info_of_cross` text COMMENT 'Сведения о взаимозаменяемых изделиях',
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_UNIQUE` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=26689 DEFAULT CHARSET=utf8

в config/database.php в секции connections добавил (с участием переменных БД MYSQL существующего пользователя):

//other database configs

        'information_schema' => [
            'driver'    => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database'  => 'information_schema',
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
        ],

в web.php следующий код (часть кода):

Route::get('reestr', 'PostsController@reestr');

В контроллере PostsController "вот так вот, вот так вот" ©:
(часть кода)

namespace App\Http\Controllers;

use App\v2_rees;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Schema;

class PostsController extends Controller
{
        public function reestr(){
        $req='SELECT COLUMN_COMMENT FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='orion_v2' AND TABLE_NAME='v2_rees'';
        $string_title = DB::connection('information_schema')->table('COLUMNS')->select(DB::raw($req));
        $result = DB::table('v2_rees')->simplePaginate(15);
        return view('posts.reestr', ['results' => $result, 'string_title' => $string_title]);
        }    //
}

В reestr.blade.php имею такую картину:

<table><tr><td>
   @foreach($string_title as $cell_title)
      <td>
      @php
         echo $cell_title;
      @endphp
      </td>
   @endforeach
   </td></tr>
   @foreach ($results as $string)
      <tr>
      @foreach($string as $cell)
         <td >
         @php
            echo $cell;
         @endphp
         </td>
      @endforeach
      </tr>
   @endforeach
</table>

Получаю такую ошибку:

Symfony\Component\Debug\Exception\FatalThrowableError
syntax error, unexpected 'orion_v2' (T_STRING)

Что я делаю не так? Не нашел в интернете как вернуть массив комментариев к столбцам таблицы, прошу ткнуть носом.

Изменено lopata (07.10.2019 11:11:39)

Не в сети

#2 08.10.2019 10:16:08

Re: Как вытащить комментарии из information_schema

В общем сам и решил, костыль получился такой:

В контроллере PostsController:

namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;

class PostsController extends Controller
{
   public function reestr(){
      $columns=array('UIN_rec_rees', 'NUM_RU', 'date_of_reg', 'name', 'name_of_applicant', 'name_of_manufacturer');
      $string_title = DB::connection('information_schema')->table('COLUMNS')->select('COLUMN_NAME', 'COLUMN_COMMENT')->WHERE('TABLE_SCHEMA', 'orion_v2')->WHERE('TABLE_NAME', 'v2_rees')->get()->toArray();
      $arr=array();
      foreach ($columns as $value_column){
         foreach ($string_title as $value_schema){
            if ($value_schema->COLUMN_NAME==$value_column){
            array_push($arr, $value_schema->COLUMN_COMMENT);
            }
         }
      }
      $result = DB::table('v2_rees')->select($columns)->simplePaginate(15);
      return view('posts.reestr', ['results' => $result, 'string_title' => $arr]);
   }
}

В reestr.blade.php:

<table><tr>
   @foreach ($string_title as $cell_title)
      <td>{{ $cell_title }}</td>
   @endforeach
   </tr>
   @foreach ($results as $string)
      <tr>
      @foreach($string as $cell)
         <td >
         @php
         echo $cell;
         @endphp
         </td>
        @endforeach
      </tr>
   @endforeach
</table>

Не в сети

Подвал раздела