2016-09-02 5 views
0

У меня следующая ситуация:Laravel 5,3: hasManyThrough отношения

location 
    id - integer 
    network_id - integer (FK) 

network 
    id - integer 
    owner_id - integer (FK) 

owner 
    id - integer 
    name - string 

У меня есть Красноречивый модель для моих данных о местоположении. Теперь, что я хочу сделать, создается RESTful API, где я могу получить данные владельца через сетевую модель.

Я пробовал использовать hasManyThrough без везения. Модель имеет следующие отношения;

Network - Location = One to Many 
Owner - network = One to One 

Так много мест принадлежат одной сети, и каждая сеть имеет одного владельца. Это всегда так.

Я пробовал следующее.

class Location extends Model 
{ 
    public function owner() { 
     return $this->hasManyThrough('App\Owner', 'App\Network, 'id', 'id); 
    } 
} 

Затем верните модель в мой ресурс.

class LocationController extends Controller 
{ 
    public function index() { 
     return [ 
     'data' => Location::with('network', 'owner')->take($limit)->take($offset)->get() 
     ]; 
    } 
} 

У меня нет ошибки, но модель не возвращает ни одного владельца, а просто пустой массив.

Может ли кто-нибудь помочь мне создать отношения между этими моделями, используя Laravel's Eloquent? Я использую Laravel 5.3.

+1

Пожалуйста, покажите нам, что вы пробовали и какие проблемы возникли. – Adrenaxus

ответ

1

Не уверен, подходит ли ваша структура таблицы, чтобы иметь возможность использовать hasManyThrough

Из того, что я могу видеть, с документацией, вам нужно будет

location 
    id - integer 
    network_id - integer 

network 
    id - integer 
    location_id - integer 

owner 
    id - integer 
    network_id - integer 
    name - string 

Тогда вы могли бы использовать

return $this->hasManyThrough(
      'App\Owner', 'App\Network', 
      'location_id', 'network_id', 'id' 
     ); 

При этом вы можете заставить его работать, пытаясь использовать разные комбинации hasManyThrough, например

return $this->hasManyThrough('App\Owner', 'App\Network, 'owner_id', 'id', 'network_id'); 
0

связывают отношения с ниже код

class Location extends Model 
{ 
public function network() 
{ 
    return $this->hasMany('App\Network'); 
} 
} 


class Network extends Model 
{ 

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

это решить вашу проблему ...

0

Владелец Модель:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Owner extends Model 
{  

    public function get_data() 
    { 
     return $this->belongsToMany('App\Location','App\Network'); 
    } 

} 

вызовов Модель:

<?php 

$data=Owner::find(1)->get_data()->select('network_id','location_id')->get(); 

=> Получить сеть и табличные данные о местоположении для использования выберите опцию