2015-12-14 2 views
1

Когда я запускаю этот код, он выдает мне ошибкуДостигнут максимальный уровень гнездования «1000», прерывается! на присоединиться + получить() даже настройки XDebug

$result = Commission::leftJoin("bill" , "bill.id" , "=" , "Commissions.bill_id")->selectRaw( $raw)->groupBy("Commissions.id")->get(); 

, но этот второй код работает отлично

$result = Commission::leftJoin("bill" , "bill.id" , "=" , "Commissions.bill_id")->selectRaw( $raw)->groupBy("Commissions.id")->get()->first(); 

даже я поставил ->take(10), до сих пор бросает меня погрешность

Максимальный уровень гнездования функции «1000» достигнут, прерывается!

как вы можете видеть на сообщении об ошибке, я установил xdebug.max_nesting_level до 1000

теперь, как говорится, мне нужно, чтобы получить все счета с тем же комиссиями ID, но функция get() не позволит мне сделать это, если я не поставлю first(). Мне интересно, что еще может вызвать эту ошибку? Буду признателен за любую оказанную помощь.

UPDATE

Я понял это. Спасибо, что помогли мне разобраться в возможных причинах. Во всяком случае, я должен объяснить, что произошло. Вышеприведенный код не имеет ничего общего с ошибкой (извинения, я недостаточно разбирался и должен спрашивать здесь).

У меня есть Controller.php

public function retrieve($type , $str = ''){ 
    $base = new BaseReport(); 
    $class = ($type == "BaseReport" ? "Reports\\" . $type : "Reports\\" . $base->getMap($type)) ; 
    $report = new $class(); 
    return $report->getVariable($str); 
} 

public function retrieveData($items , $type , $where , $groupby) 
{ 
    $base = new BaseReport(); 
    $class = ($type == "BaseReport" ? "Reports\\" . $type : "Reports\\" . $base->getMap($type)) ; 
    $report = new $class(); 
    return $report->retrieveData($items , $where , $groupby); 
} 

И BaseReport.php

public function retrieveData($items , $where , $groupby = ''){ 
    //SOME LONG CODE 

//THIS IS THE CODE I STATED IN THE QUESTION 
$result = $model->leftJoin($table , $table . "." $pk , "=" , $base_table . "." . $fk) 
->selectRaw( $raw) 
->groupBy($base_table . "." . $pk) 
->get(); 
return $result;} 

который я использовал последовательно где-то в моей странице

$base_ = "commissions" 
         $transactions = $print_format->retrieveData($fcs , $base_ . ".report" , $where , $table_group_by); 
         $cellItem = $print_format->retrieve($base . ".report" , $fcs[$i]); 

И $print_format->retrieve возвращается нуль и вызвала ошибку

Еще раз спасибо за разборку вещей.

+1

Итак, каков ваш вопрос? – Daan

+0

эти два фрагмента кода одинаковы –

+0

Нет, они не являются @limonte, во втором примере он использует '-> first();' – Daan

ответ

0

Я считаю, что это происходит потому, что один из методов, которые вы вызываете, вызывает себя, вызывая цикл и сообщение об ошибке, которое вы получаете.

Моя догадка - это метод selectRaw. Какой SQL вы проходите?

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

http://laravel.com/docs/5.1/eloquent-relationships#eager-loading

Так Комиссия :: с ('Законопроект') -> где ... или что-то подобное.