首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 4雄辩的枢轴台

Laravel 4雄辩的枢轴台
EN

Stack Overflow用户
提问于 2013-05-14 18:57:45
回答 1查看 17.4K关注 0票数 10

我有三个表:用户、条目和user_items。用户有许多项,一个项属于许多用户。

表:

代码语言:javascript
复制
Users
id
username
password

Items
id
name
equipable

User_items
id
user_id
item_id
equipped

模型:

代码语言:javascript
复制
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)表中,我有一个非常重要的列,名为“named”。

我有一个表单,用户可以装备,明确和投掷项目。此表单有一个带有pivot (user_items)表行id的隐藏字段。因此,当用户试图装备一个项目时,系统会检查该项目是否可安装。

因此,我想要一个具有pivot数据和item数据的对象,基于pivot表中的item_id,我可以发送到处理程序(在那里处理所有的逻辑)。

所以我要做的是先访问pivot表,然后访问item表。

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

代码语言:javascript
复制
$item = User::find(1)->items->pivot->find(1);

这有可能做到吗?

EN

回答 1

Stack Overflow用户

发布于 2013-06-05 14:09:43

首先,你必须在你的支点呼叫中包括“可配置”:

代码语言:javascript
复制
return $this->belongsToMany('User', 'user_items')
             ->withPivot('equipable');

然后,你可以问雄辩的,如果你的项目是可配置的,或没有:

代码语言:javascript
复制
$item = User::with('items')->get()->find(1)->items->find(2)->pivot->equipable;

记住两件事:

  1. 雄辩地在内部使用“项目”作为关键,这样可能会产生干扰。
  2. 无论您在"get()“之前放置了什么方法,都是db查询的一部分。在"get()“之后的所有内容都由PHP在对象上处理。在大多数情况下,后者的速度会慢一些。
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16550761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档