2014-02-18 3 views
1

У меня есть глупый вопрос.Выбрать в Laravel

Как я уже знаю, что запрос на выборку в Laravel всегда возвращает массив результатов, У меня есть этот запрос:

 $id = DB::select('select id from users where username = ?', array(Session::get('theuser'))); 

, вставив этот идентификатор в моей таблице

   DB::table('characters')->insert(array(
       'id'   => $id, 
       'char_name'  => $charname, 
       'char_dynasty' => $dynastyname,      
       'picture'  => 'Male1.png'     
      )); 

Я буду получить ошибку: ksort() ожидает, что параметр 1 будет массивом, указанная строка. Как я могу избавиться от этого? Заранее спасибо!

+0

Имеющийся в наличии код не применим. Если исключение выбрано в файле фрейма, сообщите нам версию, имя файла и номер строки. Если это в вашем коде, тогда покажите нам код, в котором вы вызываете 'ksort'. –

+0

Я не вижу 'ksort' в любом из кода –

+0

C: \ wamp \ www \ CaughtMiddle \ tutorial \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Query \ Builder.php \t \t // Поскольку каждый вставка обрабатывается как пакетная вставка, мы будем уверены, что \t \t // привязки структурированы таким образом, который удобен для построения этих \t \t // вставляет инструкции, проверяя элементы на самом деле массивом. \t \t еще \t \t { \t \t \t Еогеасп ($ значения как $ ключ => $ значение) \t \t \t { \t \t \t \t ksort ($ значение); $ values ​​[$ key] = $ value; \t \t \t} \t} –

ответ

2

По меньшей мере один из $id, или $dynastyname - это массив, которого не должно быть. Вы используете его неправильно.

Ниже приведено POC, подтверждающее это. Выход «Предупреждение: ksort() ожидает, что параметр 1 будет массивом, целое число, указанное в строке 13». Он работает, как ожидается, при предоставлении 'id' => 'a'.

function insert(array $values) 
{ 

     if (! is_array(reset($values))) 
     { 
      $values = array($values); 
     } 

     else 
     { 
      foreach ($values as $key => $value) 
      { 
       ksort($value); $values[$key] = $value; 
      } 
     } 

     var_dump($values); 
} 

insert(array(
    'id'   => array('a'), 
    'char_name'  => 2, 
    'char_dynasty' => 3,      
    'picture'  => 'Male1.png'     
)); 
+0

Да, это правда. Проблема заключается в «id» => $ id. При комментировании этой строки запрос вставки работает так, как ожидалось. Я думаю, что $ id является массивом в соответствии с документацией Laravel ... select() всегда возвращает массив. Я не знаю, как мне вставить в мой столбец id этот массив $ id. –

+0

Вы можете использовать построитель запросов (http://laravel.com/docs/queries#selects) с 'first' вместо эквивалентного' get' для создания ваших запросов, а не для «необработанного» DB API. –

+0

Или вы можете просто «array_pop» получить первое значение из '$ id', если вы знаете, что есть только один результат. –

 Смежные вопросы

  • Нет связанных вопросов^_^