2017-02-10 10 views
0

そのLaravel 5.3Laravel ORM多く

オブジェクトの関係の中で立ち往生 Iました次のようないくつかのDBモデルここ

お客様が複数のイベント

Iを持つことができ、複数のデバイスとデバイスを持つことができます私のモデルでは、関係が定義されています。

DeviceEvents :: with(['customer']) - > get();のようなイベントを取得しようとすると、それは、例外なく、何も返しません..私はこのORMを解決するために助けてください..


customer (Model: Customer) 
======== 
id | name 

function devices = $this->hasMany('App\Devices'); 
-------------------------------------------------------------------------------- 
devices (Model: Devices) 
======== 
id | customer_id | name 

function customer = $this->belongsTo('App\Customer'); 
function events = $this->hasMany('App\DeviceEvents'); 
-------------------------------------------------------------------------------- 

event_logs (Model: DeviceEvents) 
========== 
id | device_id 

function device = $this->belongsTo('App\Devices'); 
+0

どのようなエラーが表示されますか? –

+0

私は 'Customer :: with( '' devices '=> function($ query){ $ query-> with(' events '); }] - >ここで(' id '、' YOUR_CUSTOMER ') - > get(); 'エラーが発生しました ' SQLSTATE [42S22]:列が見つかりません:1054不明な列 'device_events.customer_devices_id' –

+0

1つのデバイスを複数の顧客に割り当てることはできますか?あなたのデータベース構造はそれができると示唆しています –

答えて

3

雄弁は関係名から外部キー列の名前を導出します。関係という名前のデバイスはなので、Eloquentは外部キーの列がdevices_idと呼ばれることを前提としています。別の名前を使用する場合は、関係を作成するときにその名前を指定する必要があります。

あなたは今$ customer->デバイスをして、お客様のデバイスにアクセスし、それらのそれぞれのイベントのリストを取得するためにそれらを反復処理することができるはずです

$this->belongsTo('App\Devices'); 

$this->belongsTo('App\Devices', 'device_id'); 

と交換。

あなただけの特定の顧客のすべてのデバイスのイベントのリストを取得したい場合は、新しいを定義する必要がありますあり、多くのスルーカスタマーモデルで関係を:今

public function events() { 
    return $this->hasManyThrough('App\DeviceEvents', 'App\Devices', 'customer_id', 'device_id', 'id'); 
} 

、あなたと顧客とそのイベントを取得することができます

$customer = Customer::with('events')->find('YOUR_CUSTOMER'); 

すべてのイベントが$ customer->イベントコレクションでご利用いただけます。

さらにいくつかのヒント:

あなたは熱心な負荷はるかに簡単な方法で関係を入れ子にすることができます)(

//load customer with related devices and their events 
Customer::with('devices.events')->find('YOUR_CUSTOMER'); 

は、私はあなたが検索を使用することができ、その主キーでレコードを取得するために注文方法:

$customer = Customer::find('YOUR_CUSTOMER'); 
+0

私の問題を解決してくれてありがとう.. –