За последние 24 часа нас посетили 22656 программистов и 1271 робот. Сейчас ищут 769 программистов ...

toArray() не работает

Тема в разделе "Laravel", создана пользователем Qvei, 2 янв 2021.

  1. Qvei

    Qvei Новичок

    С нами с:
    10 ноя 2019
    Сообщения:
    60
    Симпатии:
    4
    С новым годом:).

    Подскажите как решить..
    Есть таблица в БД sql в ней 1 строка,три ключа и их строковые значения.
    как вывести ее в array?
    Нужно мапнуть кнопки
    Код (Text):
    1. $buttons = array_map(function($name,$val){
    2.                     return Keyboard::inlineButton(['text' => $name,'callback_data' => $val]);
    3.                 },array_keys($buttons),array_values($buttons));
    4.                 $inline   = Keyboard::make()->inline();
    5.                 $keyboard = call_user_func_array([$inline, 'row'], $buttons);
    если просто взять
    Код (Text):
    1. $buttons = array('1' => '11', '2' => '22', ....);
    То все работает

    Но мне надо так?:
    Код (Text):
    1. $buttons = DB::table('buttonsmenu2')->get()->toArray();
    все что смог найти перепробовал не работает ни один нагугленный способ.
    Что я делаю не так? как вывести эти кнопки правильно?
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Покажи таблицу, нифига не понятно, что пытаешься сделать.
     
  3. Qvei

    Qvei Новичок

    С нами с:
    10 ноя 2019
    Сообщения:
    60
    Симпатии:
    4
    Код (Text):
    1. public function up()
    2.     {
    3.         // Create table
    4.         Schema::create('buttonsmenu2', function (Blueprint $table) {
    5.             $table->increments('id');
    6.             $table->string('кнопка1');
    7.             $table->string('кнопка2');
    8.             $table->string('кнопка3');
    9.             });  
    10.     }
    просто таблица в ней id и 3 поля ключ => значение
    хочу ключ засунуть в поле кнопки 'text', а значение в 'callback_data'.
    с обычной array (tесли просто в ручную прописать аrray типа: $buttons = array('кнопка1' => 'кнопкаa', 'кнопка2' => 'кнопкаb','кнопка3' => 'кнопкаc'); то все работает.
    Как вывести таблицу buttonsmenu2 вот в таком же виде как в ручную? как это правильно сделать?
    таблицу создал не в ларе. обращаюсь через use DB (не eloquent если имеет значение). много очень кнопок разных
     
  4. Qvei

    Qvei Новичок

    С нами с:
    10 ноя 2019
    Сообщения:
    60
    Симпатии:
    4
    вот так все работает
    Код (Text):
    1.  
    2. $buttons = array('Новини' => 'newsss', 'Смартфони' => 'phonsss', 'Повітря' => 'jakistpov' );
    3.                 $buttons = array_map(function($name,$val){
    4.                     return Keyboard::inlineButton(['text' => $name,'callback_data' => $val]);
    5.                 },array_keys($buttons),array_values($buttons));
    6.                 $inline   = Keyboard::make()->inline();
    7.                 $keyboard = call_user_func_array([$inline, 'row'], $buttons);
    Хочу $buttons заменить на $buttons = DB::table('buttonsmenu2')->get()->toArray(); чтоб было как выше но возникает ошибка: production.ERROR: Bad Request: can't parse inline keyboard button: Field "callback_data" must be of type String
    Оно ведь итак в стринг... что я делаю не так?
     
  5. Qvei

    Qvei Новичок

    С нами с:
    10 ноя 2019
    Сообщения:
    60
    Симпатии:
    4
    блин, все заредактировал )
    ошибка: production.ERROR: Bad Request: can't parse inline keyboard button: Field "callback_data" must be of type String
    возникает из-за: stdClass в котором возвращается бд запрос $buttons = DB::table('buttonsmenu2')->get()->toArray();
    Как получить array
     
  6. Qvei

    Qvei Новичок

    С нами с:
    10 ноя 2019
    Сообщения:
    60
    Симпатии:
    4
    Разобрался,
    Код (Text):
    1. $buttons = DB::table('buttonsmenu2')->first();
    2.             $buttons = (array)$buttons ;
    так норм
     
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Бррр.... Ну ладно, раз норм
     
  8. Qvei

    Qvei Новичок

    С нами с:
    10 ноя 2019
    Сообщения:
    60
    Симпатии:
    4
    Можно еще вопрос...
    У меня есть переменная в которой всегда число от 1 до 5 (ключи кнопок в бд)
    Возможно как-то вот етот запрос к бд $buttons = DB::table('buttons')->select('1','2','3'....)->... // выбираю все ключи кроме ключа из переменной
    сделать динамичным, тоесть выбрать все поля кроме того что в переменной..
    что-то типа $buttons = DB::table('buttons')->select('*')->exept($переменная) // это бред, но просто чтоб было понятно что хочу.
    Это реально?
     
    #8 Qvei, 8 янв 2021
    Последнее редактирование: 8 янв 2021
  9. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    Неужели всё настолько плохо, в плане базовых знаний?!
    Впрочем, вот: Database: Query Builder - Laravel - Basic Where Clauses
     
  10. Qvei

    Qvei Новичок

    С нами с:
    10 ноя 2019
    Сообщения:
    60
    Симпатии:
    4
    Я оттуда и пришел..
    У меня проблема, вот чесно, перечитал кучу инфы, перепробовал кучу методов и ничего не работает..
    Мне изначально надо было этот запрос: $buttons = DB::table('buttons')->get(); вернуть как array..
    Ну вот почему вот это:
    $buttons = DB::table('buttons')->first();
    $buttons = (array)$buttons;
    дает результат в виде '1' => 'knopka1','2' => 'knopka2'... и все прекрасно работает там куда эти кнопки идут.
    А если так
    $buttons = DB::table('buttons')->where('1','!=',$переменная)->get();
    $buttons = (array)$buttons;
    то дальше получаю ошибку: Bad Request: can't parse inline keyboard button: Field \"callback_data\" must be of type String.
    Пробовал перед запросом к бд менять fetch_assoc тоже не работает.
    Подскажи пожалуйста как $buttons = DB::table('buttons')->where('1','!=',$переменная)->get() этот запрос вернуть как array тобеж так: '1' => 'knopka1','2' => 'knopka2'...
     
  11. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @Qvei, потому что имя поля с кнопкой - не '1', если верить написанному в #3.
    А если всё-таки используются цифры для именования колонок - в запросе пиши названия колонок с использованием обратного апострофа. `1`
     
  12. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    К тому-же first() возвращает одну строку из найденного, в отличие от get()