2015-02-18 1 views
1

когда я звоню $id и $tid в сырой функции для получения некоторых данных из поддокума коллекции mongodb, это покажет мне ошибку these two variables are undefined($tid,$id)?

<?php 
$id=IntValue; 
$tId=IntValue; 
if($tId==0) 
{ 
    $maxPlayers=0; 
} 
else 
{ 
    $result = DB::collection('PrizeDistributionTemplate')->raw(function($collection) 
     { 

      return $collection->aggregate(array(
       array(
        '$match' => array('id' => $id,'templates.tId' => $tid) 
       ), 
       array('$unwind' => '$templates'), 
       array(
        '$match' => array('id' => $id,'templates.tId' => $tid) 
       ), 
      ));  
     }); 

    $result=json_decode(json_encode($result),true); 
    $maxPlayers=$result['result'][0]['templates']['maxPlayers']; 
    $maxPlayers=intval($maxPlayers)+2; 
} 
?> 

ответ

0

Он будет отлично работать с насыпными Кроме того, таким образом, вам просто нужно создать на массив и передать его.

$temp = [ 
    [ 
    'item' => "envelopes" 
    ], 
    [ 
    'item' => "envelopesas" 
    ], 
    [ 
    'item' => "lala" 
    ] 
]; 

$userData = DB::table('log') - > raw(function ($collection) use($temp) 
{ 

    return $collection - > insertMany($temp); 
}); 
1

При использовании функции обратного вызова в PHP, функцию, как это собственный объем и не может получить доступ к переменным извне это сфера.

$foo = true; 

DB::collection('something')->raw(function ($collection) { 
    echo $foo;// $foo is undefined here, this create an error 
}); 

echo $foo;// here it work 

Но вы можете кормить обратный вызов с помощью переменных PHP use keyword:

$foo = true; 

DB::collection('something')->raw(function ($collection) use ($foo) { 
    echo $foo;// now it works 
});