gpt4 book ai didi

php - Laravel 4 Eloquent 数据透视表

转载 作者:可可西里 更新时间:2023-10-31 22:41:08 24 4
gpt4 key购买 nike

我有三个表:users、items 和 user_items。一个用户拥有多个元素,一个元素属于多个用户。

表格:

Users
id
username
password

Items
id
name
equipable

User_items
id
user_id
item_id
equipped

模型:

class User extends Eloquent {
public function items()
{
return $this->belongsToMany('Item', 'user_items')
->withPivot('equipped');
}
}

class Item extends Eloquent {
public function users()
{
return $this->belongsToMany('User', 'user_items');
}
}

在数据透视表 (user_items) 中,我有一个非常重要的列,名为“equipped”。

我有一个表单,用户可以在其中装备、取消装备和 throw 元素。此表单有一个隐藏字段,其中包含数据透视表 (user_items) 表行 ID。因此,当用户尝试装备一件元素时,系统会检查该元素是否可装备。

因此,我想要一个包含数据透视表数据和项目数据的对象,基于数据透视表中的 item_id,我可以将其发送到处理程序(处理所有逻辑的地方)。

所以我要做的是先访问数据透视表,然后再访问项目表。

像这样的东西(不起作用):

$item = User::find(1)->items->pivot->find(1);

这可能吗?

最佳答案

您首先必须在数据透视调用中包含“equipable”:

return $this->belongsToMany('User', 'user_items')
->withPivot('equipable');

然后你可以问 Eloquent 你的元素是否可以装备:

$item = User::with('items')->get()->find(1)->items->find(2)->pivot->equipable;

请记住两点:

  1. Eloquent 在内部使用“items”作为键,因此这可能会产生干扰。
  2. 在“get()”之前放置的任何方法都是数据库查询的一部分。 “get()”之后的所有内容都由 PHP 在对象上处理。在大多数情况下,后者会更慢。

关于php - Laravel 4 Eloquent 数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16550761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com