Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 具有多重关系的Laravel雄辩查询_Php_Mysql_Laravel_Eloquent - Fatal编程技术网

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;