2016-11-16 108 views
0

之間的關係,我有以下數據模型:獲取laravel數據與表

class Cliente extends Model 
{ 
    public function sector() 
    { 
      return $this->belongsTo(Sector::class,'sectoresId'); 
    } 
} 
class Sector extends Model 
{ 
    public function sectorLanguage() 
    { 
      return $this->hasMany(SectorLanguage::class,'sectoresId'); 
    } 

    public function cliente() 
    { 
      return $this->hasMany(ClienteLanguage::class,'sectoresId'); 
    } 
} 
class SectorLanguage extends Model 
{ 
    public function sector() 
    { 
     return $this->belongsTo(Sector::class,'sectoresId'); 
    } 

    public function idioma() 
    { 
     return $this->belongsTo(Idioma::class,'idiomasId'); 
    } 
} 

我要恢復所有活動的客戶端和部門的名稱,其所屬,如果我做這樣的事情

$cliente = Cliente::where('active','1'); 

當我運行$客戶端我不能進入屬性

foreach($cliente as $cli) { 
    $cli->sector->sectorLanguage->nombre; 
} 

爲什麼?它只有當我發現它的ID

$cliente = Cliente::find(1); 
echo $cliente->sector->sectorLanguage->nombre; 

我怎樣才能得到我所需要的,而不訴諸做與SQL查詢構建器爲我工作。

非常感謝你,問候。

回答

1

根據您定義的關係,則Sector有許多sectorLanguage,這意味着你收到collection,所以你應該像這樣的對象上工作:

$cliente->where('active', 1) 
      ->first() 
      ->sector 
      ->sectorLanguage 
      ->first() 
      ->nombre; 

Cliente::where('active', 1)sectorLanguage給你收藏,所以你 應該首先從$cliente & sectorLanguage得到第一項然後申請 所需的關係

希望它能工作!

+0

如何獲得正確的語言。客戶姓名在所有語言中均相同,但部門名稱不同。 – monchyrcg

+0

你可以像這樣使用'where()' - '$ cliente-> sector-> sectorLanguage-> where('name','YOUR_NAME') - > get();'。 –