Php 拉威尔与类型的关系
我试图找到解决我问题的最佳方案,但没有得到我想要的 我现在有4张桌子,结构像这样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-
:: 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当然只需添加表和模型的详细信息。也许这些文件有问题。我明白了,这里的问题是我对用用户特定的物品填充武器和装甲表并不感兴趣。我只希望使用关系表,以便保持其干净。