2017-01-22 9 views
1

は、次のデータベース・スキームを検討し、中間テーブルを介してbelongsToのを取得:Laravelは

companies 
    -- id 
    -- name 

logos 
    -- id 
    -- active 
    -- company_id 
    -- image_id 

images 
    -- id 
    -- filename 
    -- path 
    -- type 

その後、私はこのように定義されたモデルで関係を持っている:

Company.php

public function logos() { 
    return $this->hasMany('App\Models\Logo'); 
} 

ロゴ.php

public function image() { 
    $this->belongsTo('App\Models\Image'); 
} 

今、私はそのIDとそのロゴと画像をもとにして特定の会社を取得したいと考えています。だから私はこのようにそれを取得しようとしたが、それはエラーがスローされます。

Relationship method must return an object of type Illuminate\Database\Eloquent\Relations\Relation

CompanyController.php

public function show($id) { 
    $company = Company::findOrFail($id); 
    $requester = JWTAuth::parseToken()->toUser(); 
    if(!$requester->hasRole('noc') && $requester->company_id != $company->id) { 
     return $this->response->errorUnauthorized("You have no rights to view this company profile."); 
    } 

    // I am trying to fetch it this way // 
    $company->logos; 
    foreach ($company->logos as $logo) { 
     return $logo->image; 
    } 
    return $this->response->array(compact('company'))->setStatusCode(200); 
} 

を誰も私を助けてもらえますか? :)ありがとう!

答えて

1

使用nested eager loading

$company = Company::with('logos.image')->where('id', $id)->first(); 
+0

は動作しませんが、スロー:あなたは 'image'関係に' return'を追加するのを忘れたのでですnull'なので – user3216673

+0

上のメンバ関数addEagerConstraintsに 'コール() 。 –

+0

:Dはい、私はnoobです!ありがとう:)、私は6分であなたの答えを受け入れるでしょう:) – user3216673