2016-11-16 31 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

'$ cliente-> sector-> sectorLanguage-> where( 'name'、 'YOUR_NAME') - > get();'のように 'where()'を使うことができます。 –

関連する問題