2015-01-15 4 views
0

Я не мог сделать следующее Laravel код работает. Я пробую следующий код. Вот массив столбцов таблицы:Как пройти переменную внутри Laravel Schema builder

$cols = array(
    'inc' => array('id'), 
    'str' => array(
       'name', 
       'email', 
       'password' 
      ), 
    ... 
); 

Вот функция:

private function addCols($tableName, $cols){ 
    foreach ($cols as $k => $type) { 
    foreach ($cols[$k] as $col) { 
    if(!Schema::hasColumn($tableName, $col)){ 
     Schema::table($tableName, function($table) 
     { 
      // Problem here $k and $col are `Undefined` 

     } 
     // Outside here $k and $col have values like `str`, `name` 
    } 
    } 
    } 
} 

Я не так хорошо с PHP.

ответ

8

Ключевое слово use - это то, что вы ищете. Это помогает анонимные функции «наследуют» существующие переменные, которые иначе были бы вне их сферы:

Schema::table($tableName, function($table) use ($k, $col) 
    { 
     // $k and $col are now defined 
    } 

Вот документ: http://php.net/manual/en/functions.anonymous.php#example-186

+0

Спасибо, это он. Не знал этого. Еще раз спасибо за подробное объяснение. –

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