Php 具有多重关系的Laravel雄辩查询
我有四个表,分别是Php 具有多重关系的Laravel雄辩查询,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我有四个表,分别是部门,用户,项目,项目 这种关系是这样的: 用户有一个指定的部门。 项目有一个指定的部门项目库存有许多项目 结构: users ->id ->name ->password ->access_type (department_id) departments ->id ->name items ->id ->name ->department_id items_inventories ->id ->item_
部门
,用户
,项目
,项目
这种关系是这样的:
用户
有一个指定的部门
。
项目
有一个指定的部门
<代码>项目库存有许多项目
结构:
users
->id
->name
->password
->access_type (department_id)
departments
->id
->name
items
->id
->name
->department_id
items_inventories
->id
->item_id
->qty
我的模型:
class Item extends Model
{
public function department()
{
return $this->hasOne('App\Http\Models\Department', "id", "department_id");
}
}
class ItemsInventory extends Model
{
public function item()
{
return $this->hasOne('App\Http\Models\Item', "id", "item_id");
}
}
在我的项目\u库存中
如何查询属于特定部门的所有项目?由于物料
已经与部门
有关系,我如何查询:选择物料部门id等于3的物料库存中的所有物料
我的目标是,我有一个已登录的用户,我可以通过
access\u type
(department\u id)访问分配给他的部门。当我的页面加载时,我只想列出分配给他/她的部门的items\u inventory
中的项目。我已经检查过:https://laravel.com/docs/5.4/eloquent-relationships#relationship-方法vs动态属性
,但似乎找不到符合我要求的内容。谢谢你,你的关系有点混乱。表结构表示项目
属于部门
,项目库存
属于项目
。我已经根据您的表结构和如何实现所需结果建立了关系。你可能想再次检查你的关系,以确认你到底希望它如何发展。至于目前的关系,我的模型应该给你一个想法
class User extends Model
{
public function department()
{
return $this->belongsTo('App\Http\Models\Department', 'access_type');
}
}
class Department extends Model
{
public function items()
{
return $this->hasMany('App\Http\Models\Item');
}
public function itemInventory()
{
return $this->hasManyThrough('App\Http\Models\ItemsInventory', 'App\Http\Models\Item');
}
}
class Item extends Model
{
public function department()
{
return $this->belongsTo('App\Http\Models\Department');
}
public function itemInventory()
{
return $this->hasMany('App\Http\Models\ItemsInventory');
}
}
class ItemsInventory extends Model
{
public function item()
{
return $this->belongsTo('App\Http\Models\Item');
}
}
控制器逻辑
$department_id = 3;
$itemInventory = ItemsInventory::whereHas('item', function ($query) use ($department_id) {
$query->where('department_id', $department_id);
})->get();
// With user:department relation and department:iteminventory 'hasManyThrough' relation.
$itemInventory = $user->department()->itemInventory;