Laravel 5.3: hasManyThrough 关系
Laravel 5.3: hasManyThrough relationship
我有以下情况:
location
id - integer
network_id - integer (FK)
network
id - integer
owner_id - integer (FK)
owner
id - integer
name - string
我的位置数据有一个 Eloquent 模型。现在我想做的是创建一个 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);
}
}
然后 return 我资源中的模型。
class LocationController extends Controller
{
public function index() {
return [
'data' => Location::with('network', 'owner')->take($limit)->take($offset)->get()
];
}
}
我没有收到错误,但模型没有 return 任何所有者,而只是一个空数组。
任何人都可以帮助我使用 Laravel 的 Eloquent 在这些模型之间建立关系吗?我正在使用 Laravel 5.3.
不确定您的 table 结构是否适合使用 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');
使用以下代码绑定关系
class Location extends Model
{
public function network()
{
return $this->hasMany('App\Network');
}
}
class Network extends Model
{
public function owner()
{
return $this->hasOne('App\Owner');
}
}
它解决了你的问题...
所有者模型:
<?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();
=> 获取网络和位置 table 数据以使用 select 选项
我有以下情况:
location
id - integer
network_id - integer (FK)
network
id - integer
owner_id - integer (FK)
owner
id - integer
name - string
我的位置数据有一个 Eloquent 模型。现在我想做的是创建一个 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);
}
}
然后 return 我资源中的模型。
class LocationController extends Controller
{
public function index() {
return [
'data' => Location::with('network', 'owner')->take($limit)->take($offset)->get()
];
}
}
我没有收到错误,但模型没有 return 任何所有者,而只是一个空数组。
任何人都可以帮助我使用 Laravel 的 Eloquent 在这些模型之间建立关系吗?我正在使用 Laravel 5.3.
不确定您的 table 结构是否适合使用 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');
使用以下代码绑定关系
class Location extends Model
{
public function network()
{
return $this->hasMany('App\Network');
}
}
class Network extends Model
{
public function owner()
{
return $this->hasOne('App\Owner');
}
}
它解决了你的问题...
所有者模型:
<?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();
=> 获取网络和位置 table 数据以使用 select 选项