2017-01-25 3 views
2

У меня есть следующие модели: Пользователь, Устройство, Продукт.Как получить третье отношение в laravel

Пользователь

public function devices() 
{ 
    return $this->hasMany('App\Device'); 
} 

Устройство

public function user() 
{ 

    return $this->BelongsTo('App\User'); 

} 

public function reading() 
{ 
    return $this->hasMany('App\Reading', 'device_id', 'part_id'); 
} 

public function product() 
{ 
    return $this->hasOne('App\Product'); 
} 

Продукт

public function device() 
{ 
    return $this->belongsTo('App\Device'); 
} 

Следующий запрос тянет мои пользователи и все их устройства, но внутри этой коллекции не является отношением от устройства к продукт.

$deviceSingles = User::with('devices')->get(); 

Этот запрос получает мне все продукты со всеми устройствами, возложенных на него

$deviceSinglesTwo = Product::with('device')->get(); 

Как я могу получить, что третье отношение, приложенный к моему первоначальному запросу, так что я могу сделать это

$deviceSingles->device->product->title 

ответ

4

Использование nested eager loading.

Чтобы удовлетворить вложенные отношения нагрузки, вы можете использовать синтаксис «точка».

User::with('devices.product')->get() 
+0

я попытался это, но я получаю и ошибка MySQL SQLSTATE [42S22]: Column не найдено: 1054 Неизвестный столбец 'products.device_id' в 'где предложение' (SQL: SELECT * FROM 'продуктов 'где' products'.'device_id' в (1, 2)). Я должен смешивать свои столбцы. в таблице устройств есть product_id. другой tbale, имеет id, title, product – ATechGuy

+0

@keaner, вы должны проверить документы. Существует очень строгое соглашение об именах для столбцов db, которым нужно подчиняться, если вы явно не укажете имена внешних ключей. – apokryfos

+0

@keaner, потому что вы используете 'hasOne()' отношение, Laravel ищет столбец 'device_id' в таблице' products'. –

Смежные вопросы