2017-01-18 13 views
2

私はお互いの関係を持つEloquentモデルをいくつか持っていますが、関連データが存在する場合にのみこれらの関係を設定します。例えばLaravel Eloquent:関連データが存在する場合にのみ関係を設定してください。

  • 課(モデル) - > hasManyの - >ワーカー(モデル)(関係が がそうでなければ設定されていない、部門が労働者を関連している場合にのみ設定する必要があります)

可能でしょうか?私はこれを試してみましたが、horrably失敗しました:(部門モデルで)

public function worker() { 

    $model = new Department(); 

    if(isset($model->relations)) { 
     return $this->hasMany(Worker::class, 'wrk_department_id'); 
     } 
    } 

// EDIT:

{ 
"data": { 
    "type": "department", 
    "id": "8", 
    "attributes": { 
     "accessory": [], 
     "department": "Marketing", 
     "department_id": 8, 
     "dept_floor_id": 2, 
     "inventory": [], 
     "software": [], 
     "worker": [] 
    }, 
    "links": { 
     "self": { 
      "href": "http://127.0.0.1:8000/api/v2/department/8" 
     } 
    } 
}, 
"links": { 
    "self": { 
     "href": "http://127.0.0.1:8000/api/v2/department/8" 
    } 
}, 
"jsonapi": { 
    "version": "1.0" 
} 

}

を部門が私の出力は以下のようである何人の労働者を持っていない場合部門には労働者がいますが、期待どおりのものは何でもできます:

{ 
"data": { 
"type": "department", 
"id": "1", 
"attributes": { 
    "department": "Entwicklung", 
    "department_id": 1, 
    "dept_floor_id": 3 
}, 
"links": { 
    "self": { 
    "href": "http://127.0.0.1:8000/api/v2/department/1" 
    } 
}, 
"relationships": { 
    "worker": { 
    "data": [ 
     { 
     "type": "worker", 
     "id": "5" 
     }, 
     { 
     "type": "worker", 
     "id": "8" 
     }, 
     { 
     "type": "worker", 
     "id": "11" 
     }, 
     { 
     "type": "worker", 
     "id": "13" 
     }, //and so on 

空の配列を削除しようとしています(例:「worker」:[])。関連するデータがない場合に表示されます

+0

達成しようとしていることは何ですか?それに従事する労働者や他の何人かの部署だけを取得しますか? –

+0

投稿を編集しました –

+0

出力は、使用するクエリによって制御されます。あなたの 'model'で定義するものではありません。 – Gayan

答えて

1

Departmentモデルでは、関係を追加します。

public function worker() { 
    return $this->hasMany(Worker::class, 'wrk_department_id'); 
} 

そして、あなたはyour-controllerであなたmethodの内側に照会するとき。

これがコンセプトです。シナリオに適したコードを使用してください。

+0

あなたの答えをありがとう!それは働く:) –

+0

あなたがそれが役に立つとうれしい。あなたが受け入れられたとしてそれをマークしていただければ幸いです:) – Gayan

+0

私はそれを受け入れたとマークしました。残念ながら私は評判のポイントの不足のために、アップしていない、ごめんなさい:( –

0

リレーションシップを追加し、

$departments = Department::with('workers')->filter(function($department) { 
     return ! is_null($department->workers) 
    }); 

このようにして、少なくとも1人の労働者を含む部門のみが存在します。

+0

ありがとう! Gayanが提供するソリューションのように、完璧に動作します –

関連する問題