2016-04-08 12 views
0

Ich kann dies mit einem select an die Arbeit:Laravel 5.2 Eloquent Verwendung von Select in Eifrig Loaded Abfrage

User::whereNotIn('id', $ids) 
    ->select(['id', 'email']) 
    ->with('profile') 
    ->get(); 

Ich möchte nur ein paar Tasten in einem Benutzerprofil abzurufen, die mit Spannung geladen wird. Ich möchte so etwas wie dies tun:

User::whereNotIn('id', $ids) 
    ->select(['id', 'email']) 
    ->with(['profile', function ($query) { 
     $query->select(['id', 'user_id', 'first_name', 'last_name']); 
    }])->get(); 

Oder:

User::whereNotIn('id', $ids) 
    ->select(['id', 'email']) 
    ->with(['profile', function ($query) { 
     $query->addSelect(['id', 'user_id', 'first_name', 'last_name']); 
    }])->get(); 

Aber dies scheint nicht zu arbeiten, und ich bekomme diese Fehlermeldung:

ErrorException in Builder.php line 1034: 
explode() expects parameter 2 to be string, object given 

Geworfen in /Illuminate/Database/Eloquent/Builder.php:

/** 
* Parse the nested relationships in a relation. 
* 
* @param string $name 
* @param array $results 
* @return array 
*/ 
protected function parseNestedWith($name, $results) 
{ 
    $progress = []; 

    // If the relation has already been set on the result array, we will not set it 
    // again, since that would override any constraints that were already placed 
    // on the relationships. We will only set the ones that are not specified. 
    foreach (explode('.', $name) as $segment) { // <--- line 1034 
     $progress[] = $segment; 

     if (! isset($results[$last = implode('.', $progress)])) { 
      $results[$last] = function() { 
       // 
      }; 
     } 
    } 

    return $results; 
} 

Gibt es einen Weg, dies zu erreichen?

Antwort

1

Use „addSelect“ anstelle von „wählen Sie“ in der eifrigen Last Constraint Schließung

User::whereNotIn('id', $ids)->select(['id', 'email']) 
    ->with(['profile' => function($query) { 
     $query->addSelect(['id', 'user_id', 'first_name', 'last_name']); 
    }])->get(); 

Sie haben den Fremdschlüssel auf dem addSelect sonst nichts enthalten wird

+0

Hallo geladen werden, habe ich versucht, aber ich bekomme diesen Fehler: 'ErrorException in Builder.php Zeile 1034: explode() erwartet Parameter 2 als String, Objekt gegeben ' – mtpultz

+1

aktualisiert, ich habe nicht bemerkt, Sie verwenden Array-Notation für eifriges Laden – naneri

+0

Oh Mann, du' Re ein Lebensretter! Ich hätte nie herausgefunden, dass die Fremdschlüsselspalte hinzugefügt werden muss, und ich habe die Array-Notation vermasselt. Ich habe '=>' vermisst. – mtpultz

Verwandte Themen