2017-08-25 75 views
1

我正在運行Laravel 5.4,出於某種原因,我不能做1對多態關係的列選擇。我想限制在相關表中返回的列。laravel雄辯 - 不能急於加載多態關係與查詢'選擇'

這裏是我的1對多的關係,我的「1個側」:

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'); 
    } 
} 

下面是關係我的「很多副作用」表:

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(); 
    }   
} 

這裏有兩種方法,我試圖打電話給它。一沾到SystemConstants所有列,第二個我只想兩列:

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

爲什麼第一次調用返回的相關記錄,但不是第二個?這兩個調用的下面的SQL語句看起來完全一樣(除了第二次調用時只需要兩列)。

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";} 

回答

0

爲了工作,你必須在SELECT語句中添加這兩個外鍵和主鍵:

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

謝謝!我不這樣做,因爲我的兩個語句之間生成的SQL是相同的,但它的工作原理! – cardinalPilot