Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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 拉威尔与类型的关系_Php_Laravel_Laravel 5 - Fatal编程技术网

Php 拉威尔与类型的关系

Php 拉威尔与类型的关系,php,laravel,laravel-5,Php,Laravel,Laravel 5,我试图找到解决我问题的最佳方案,但没有得到我想要的 我现在有4张桌子,结构像这样 :: Users :: id name email ------ :: user_equipment :: id user_id equipment_id equipment_type :: weapons :: id name price :: armor :: id name price 我的目标是能够像这样使用我的关系: $user->equipment $user->equipment-

我试图找到解决我问题的最佳方案,但没有得到我想要的

我现在有4张桌子,结构像这样

:: Users ::
id
name
email
------

:: user_equipment ::
id
user_id
equipment_id
equipment_type

:: weapons ::
id
name
price

:: armor ::
id
name
price
我的目标是能够像这样使用我的关系:

$user->equipment
$user->equipment->weapons
$user->equipment->armor
以下是我现在拥有的:

用户模型:

class User extends Model
{    
  public function equipment()
  {
    return $this->hasOne(UserEquipment::class);
  }
}
class User extends Model
{    
  public function equipment()
  {
    return $this->hasOne(UserEquipment::class);
  }
}
用户设备型号:

class UserEquipment extends Model
{
   public function weapons()
   {
     return $this->hasMany(Weapon::class);
   }
}
class UserEquipment extends Model
{
   public function weapons()
   {
     return $this->hasMany(Weapon::class);
   }
   public function armor()
   {
     return $this->hasMany(Armor::class);
   }
}

首先,您的
用户
模型和
用户设备
模型具有相同的类名

尝试此操作,将您的
用户
型号更改为

public function weapons()
{
    return $this->hasMany('App\Weapon', 'equipment_id')->where('equipment_type','weapon'); //second paramater tells what column to relate the id
} 

public function armors()
{
    return $this->hasMany('App\Armors', 'equipment_id')->where('equipment_type','armor'); 
}
下面是您的查询方式:

User::with('weapons', 'armors')->get();
在我看来,这像是一场灾难

在您的情况下,您需要这样定义您的关系:


尝试如下更改您的表:

:: Users ::
id
name
email
------

:: user_equipment ::
id
user_id
equipment_type

:: weapons ::
id
name
price
user_equipment_id

:: armor ::
id
name
price
user_equipment_id
然后,您可以像以前一样使用这些函数: 用户模型:

class User extends Model
{    
  public function equipment()
  {
    return $this->hasOne(UserEquipment::class);
  }
}
class User extends Model
{    
  public function equipment()
  {
    return $this->hasOne(UserEquipment::class);
  }
}
用户设备型号:

class UserEquipment extends Model
{
   public function weapons()
   {
     return $this->hasMany(Weapon::class);
   }
}
class UserEquipment extends Model
{
   public function weapons()
   {
     return $this->hasMany(Weapon::class);
   }
   public function armor()
   {
     return $this->hasMany(Armor::class);
   }
}
请注意,在laravel文档中,laravel假设在模型
武器中会有外键调用
用户设备id

每个
用户是否只有一件
武器和一件
盔甲?@Capt.Teemo没有用户能够拥有很多。你能解释一下这是如何工作的吗,我现在尝试调用user::with('warms')->get();我刚刚得到一个没有找到武器的专栏。设备id。使用您提供的用户模型,与用户设备表没有连接,对吗?谢谢我不知道这是否有效。如果您绕过“用户设备”表,装甲/武器型号从何处获得“设备id”?请尝试将
hasMany
更改为
belongTomany
如果您使用的是
many to many
关系谢谢,我认为这正是我所需要的。然而,这导致了一个空集合,因此有些地方不正确。可能是数据库名称与类或其他对象没有连接吗?我更新了Relatiships定义,添加了第三个参数:
user\u device
,这会告诉laravel要查看关系的表的名称。我还链接了答案顶部的文档,以便更清楚地解释它是如何工作的。你感兴趣的部分是那一节的“定义关系的倒数”。我已经阅读了文档,仍然没有成功。表名似乎是正确的,但我认为代码位置有点不合适。谢谢,如果你愿意,请提供更多帮助can@DilleFepp当然只需添加表和模型的详细信息。也许这些文件有问题。我明白了,这里的问题是我对用用户特定的物品填充武器和装甲表并不感兴趣。我只希望使用关系表,以便保持其干净。