2017-08-25 5 views
1

Ich laufe Laravel 5.4 und aus irgendeinem Grund kann ich nicht eine Spalte wählen Sie auf eine 1 zu viele polymorphe Beziehung. Ich möchte die Spalten begrenzen, die in der zugehörigen Tabelle zurückgegeben werden.Laravel eloquent - kann nicht polymorphe Beziehung mit Anfrage "Select" laden

Hier ist meine '1 Seite' meine 1-zu-viele-Beziehung:

class MapNodes extends Model { 

    protected $table = 'map_nodes'; 
    protected $fillable = ['title']; 
    protected $validations = ['title' => 'max:200|string' ]; 
    public function SystemConstants() { 
     return $this->morphMany('App\Modules\Models\SystemConstants', 'imageable'); 
    } 
} 

Hier ist mein "vielen Nebentisch in der Beziehung:

class SystemConstants extend Model { 

    protected $table = 'system_constants'; 
    protected $fillable = ['name','imageable_id','imageable_type']; 
    protected $validations = ['name' => 'max:200|string', 
           'imageable_id' => 'integer|required', 
           'imageable_type' => 'max:45|string']; 

    // define this model as polymorphic 
    public function imageable() { 
     return $this->morphTo(); 
    }   
} 

Hier zwei Möglichkeiten, wie ich bin versuchen, es zu nennen. Man bekommt alle Spalten auf SystemConstants, und das zweite Ich möchte nur zwei Spalten:

$temp = MapNodes::with('SystemConstants')->find(25786); 
    $temp = MapNodes::with([ 'SystemConstants' => 
    function($query) { 
     return $query->select('system_constants.id', 'system_constants.name'); 
    } ])->find(25786); 

Warum der erste Aufruf die entsprechenden Datensätze zurück, aber nicht die zweite? Die folgenden SQL-Anweisungen für beide Aufrufe sehen genau gleich aus (mit der Ausnahme, dass ich im zweiten Aufruf nur zwei Spalten haben möchte).

select * from `system_constants` where 
    `system_constants`.`imageable_id` in (?) and 
    `system_constants`.`imageable_type` = ? - a:2:{i:0;i:25786;i:1;s:5:"Nodes";} 

select `system_constants`.`id`, `system_constants`.`name` from `system_constants` where 
    `system_constants`.`imageable_id` in (?) and 
    `system_constants`.`imageable_type` = ? - a:2:{i:0;i:25786;i:1;s:5:"Nodes";} 

Antwort

0

Um Ihnen zu arbeiten, sowohl die Fremdschlüssel und Primärschlüssel auf der Select-Anweisung hinzufügen:

$temp = MapNodes::with([ 'SystemConstants' => 
    function($query) { 
     return $query->select('system_constants.id', 'system_constants.name', 'system_constants.imageable_id'); 
    } ])->find(25786); 
+0

Dank! Ich weiß nicht, warum das funktioniert, weil das generierte SQL zwischen meinen beiden Anweisungen das gleiche ist, aber es funktioniert! – cardinalPilot