2016-04-03 9 views
0

我有一個API,它需要很長時間才能獲得所有的信息,因爲我只隱藏一些數據,但我想忽略不隱藏。我發現select()方法來選擇極好的數據發送並減少查詢我真正需要的所有信息的時間。 我試着剛的關係就這樣以後使用select,只是從OPR_User表中檢索唯一的名字:如何使用「選擇」方法來減少使用Eager時的數據傳輸加載

public function creatorUser() { 
    return $this->belongsTo('Knotion\OPR_User', 'idCreatorUser', 'idUser')->select('name'); 
} 

,但不工作 這是我的型號代碼

<?php 

namespace Knotion; 

use Illuminate\Database\Eloquent\Model; 

class CTL_Resource extends Model { 

    protected $table = "CTL_Resource"; 
    protected $primaryKey = "idResource"; 

    public $incrementing = false; 
    public $timestamps = false; 
    public static $snakeAttributes = false; 

    protected $hidden = [ 
     'coachVisibility', 'thumbnail', 
     'studentVisibility', 'isHTML','studentIndex', 'coachIndex', 
     'isURL', 'source', 'path', 'status', 'updateTime', 'isfolder', 
     'parentResource', 'idModifierUser', 'idResourceType', 'idCreatorUser', 'idCreationCountry' 
    ]; 

    protected $fillable = ['idResourceType','productionKey', 'idCreatorUser', 'idModifierUser', 'idCreationCountry', 'title', 'description', 'URL', 'fileName', 'extension', 'minimumAge', 'maximumAge', 'productionKey']; 

    public function creatorUser() { 
     return $this->belongsTo('Knotion\OPR_User', 'idCreatorUser', 'idUser'); 
    } 
    public function creationCountry() { 
     return $this->belongsTo('Knotion\CTL_Country', 'idCreationCountry', 'idCountry'); 
    } 
    public function resourceType() { 
     return $this->belongsTo('Knotion\CTL_ResourceType', 'idResourceType', 'idResourceType'); 
    } 
    public function quickTags() { 
     return $this->belongsToMany('Knotion\CTL_QuickTag', 'CTL_Resource_has_QuickTags', 'idResource','idQuickTag'); 
    } 
    public function tags() { 
     return $this->belongsToMany('Knotion\CTL_Tag','CTL_Resource_has_Tags', 'idResource', 'idTag'); 
    } 
    public function relatedTo() { 
     return $this->belongsToMany('Knotion\CTL_RelatedTo', 'CTL_Resource_has_RelatedTo', 'idResource', 'idRelatedTo'); 
    } 

} 

這是我的關係模型代碼(僅在需要的情況下):

<?php 

namespace Knotion; 

use Illuminate\Database\Eloquent\Model; 

class OPR_User extends Model { 
    protected $table = "OPR_User"; 
    protected $primaryKey = "idUser"; 

    public $incrementing = false; 
    public $timestamps = false; 
    public static $snakeAttributes = false; 

    protected $hidden = ['firstName', 'secondName', 'firstSurName', 'secondSurName', 'password', 'picture', 'status', 'createTime', 'updateTime', 'idUserType', 'email']; 

    public function resources() { 
    return $this->hasMany('Knotion\CTL_Resource', 'idResource'); 
    } 
    public function userType() { 
    return $this->belongsTo('Knotion\CTL_UserType', 'idUserType', 'idUserType'); 
    } 

} 

這是我的控制器代碼:

public function index(Request $request) { 

    $resources = CTL_Resource::all(); 

    $resources->resourceType->select('name'); 

     return $resources->load('creatorUser', 'creationCountry', 'resourceType', 'tags', 'quickTags', 'relatedTo'); 
    } 

回答

0

當您添加 - >選擇後 - >屬於關聯它不再是一個實際的關係類型,它是一個查詢生成器。您需要在調用 - > load之前添加選擇。

+0

嘿,感謝您的評論。我不得不包括身份證工作,我沒有發佈答案:) –

0

要解決我必須包括ID也關係中,像這樣的問題:

public function resources() { 
    return $this->hasMany('Knotion\CTL_Resource', 'idResource')->select('idResource', 'name'); 
    } 
相關問題