2017-07-03 93 views
0

我有一個多態關係,其中一個表'map_nodes'具有一對多到'system_constants'。laravel 5.4多態關係 - 通過查詢範圍渴望讀取

我似乎無法使用查詢範圍來急切加載system_constants。沒有錯誤,只是沒有記錄。

這是我的模型。我只包括一個模型「map_nodes」:

namespace App\Modules\Olab\Models; 

class SystemConstants extends BaseModel { 
    // Database: 
    // id INT(11) PK 
    // imageable_id INT(11) 
    // imageable_type VARCHAR(45) 
    // value BLOB 
    public function imageable() { 
     return $this->morphTo(); 
    } 
} 

class MapNodes extends BaseModel { 

    public function scopeConstants($query) { 
    $query->with([ 'SystemConstants' => function ($query) { 
     $query->select('system_constants.id', 
         'system_constants.value'); 
    } ]); 
    } 

    public function SystemConstants() { 
    return $this->morphMany('App\Modules\Olab\Models\SystemConstants', 'imageable'); 
    }  
} 

這是我在system_constants表:

id, imageable_id, imageable_type, value 
'1904', '25786', 'Nodes', <blob> 

請注意,我有一個關係:: morphMap定義,這讓我使用imageable_type中的'節點'。

這是我運行的是什麼:

// returns collection of system_constant records 
$temp = MapNodes::find(25786)->SystemConstants; 
// doesn't work. get map_nodes record, but no eager load of system_constants 
$temp = MapNodes::find(25786)->Constants()->first(); 

我有SQL日誌功能,我看到了上述兩種查詢正確的SQL。我可以在一個SQL工具,準確的查詢(用PARAM替換)和它的作品 - 它返回記錄:

select `system_constants`.`id`, `system_constants`.`value` 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

試試這個:'MapNodes :: find(25786) - > constants() - > first();'//常量用小寫'c' – musicvicious

+0

感謝您的回覆。不幸的是,沒有變化。 – cardinalPilot

回答

0

我不確定,但這似乎工作。我只是刪除了查詢範圍並做了一個明確的'with'。

$ temp = MapNodes :: with('SystemConstants') - > find(25786);