2014-02-18 85 views
1

我有一個愚蠢的小問題。在Laravel中選擇

正如我已經知道在Laravel選擇查詢將始終返回結果的數組, 我有這個疑問:

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

通過將本ID到我的桌子

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

我會得到錯誤:ksort()期望參數1是數組,字符串給定。 我該如何擺脫這個?提前致謝!

+0

現已推出的代碼是不相關的。如果在框架文件中拋出異常,請告訴我們版本,文件名和行號。如果它在您的代碼中,然後向我們顯示您調用'ksort'的代碼。 –

+0

我沒有在代碼 –

+0

C:\ wamp \ www \ CaughtMiddle \ tutorial \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Query \ Builder.php中看到'ksort' \t \t //因爲每一個插入會像批處理插入一樣處理,我們將確保綁定以便於構建這些對象的方式構造//通過驗證元素實際上是一個數組插入語句。 \t \t別的 \t \t { \t \t \t的foreach($值$密鑰=> $值) \t \t \t { \t \t \t \t ksort($值); $ values [$ key] = $ value; \t \t \t} \t \t} –

回答

2

$id,$charname$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'中的第一個值。 –