当前位置: 首页 > 知识库问答 >
问题:

Laravel-一个表与其他两个表之间的关系

皇甫心思
2023-03-14

我有3个表:用户权限。用户和池具有透视表,因为它们具有多对多关系。

权限条目仅由我手动创建。然后,每个池可以根据自己的用户认为合适的情况将权限分配给他们自己的用户。因此,用于将用户链接到权限的透视表需要同时具有pool\u iduser\u idpermission\u id

那么这个数据透视表是如何工作的呢?如何制作三向透视表?

编辑:我的问题基本上是在这里问的,没有令人满意的答案!

共有1个答案

暨宸
2023-03-14

对于链接3个模型的数据透视表,您需要在附加模型时发送其他数据,如以下回答:Laravel-三个模型的数据透视表-如何插入相关模型?:

$model->relation()->attach($otherModel, ['thirdModelKeyName' => 'thirdModelKeyValue']);

您可以创建自定义的关系类,比如ThreeBelongsTo多,它将扩展属性To多并覆盖附加()方法。

然后在涉及此类关系的模型上重写belongtomany()方法(或使用其中的特征),以在适用时返回提到的自定义关系类,而不是泛型belongtomany

方法可以是这样的:

public function attach($id, array $attributes = array(), $touch = true, $otherId = null)
{
    if ( ! is_null($otherId))
    {
        if ($otherId instanceof Model) $otherId = $otherId->getKey();

        $attributes[$this->getThirdKey()] = $otherId;
    }

    return parent::attach($id, $attributes, $touch);
}

您还可以使用一些帮助工具来获取这些相关的模型,例如(密钥名称应该通过灵活的方法获得,它们被硬编码以使其简短):

/**
 * Accessor for far related model (thru pivot)
 *
 * @return mixed
 */
public function getTrackAttribute()
{
    if (is_null($this->pivot)) return null;

    if (is_null($this->pivot->track_id)) return null;

    return ($this->pivot->track) ?: $this->pivot->track = Track::find($this->pivot->track_id);
}
 类似资料:
  • 我有2张桌子。一个有用户,一个有位置。我创建了一个名为user_locations的数据透视表。一个用户可以有一个或多个位置。一个位置可以属于一个或多个用户。所以我在这些桌子上有多对多的关系。我已经从laravel上读到过附加方法,但我不太确定如何使用它。 在“我的用户和位置”表中,我有一个id,该id在“用户id”和“位置id”下进入我的透视表。 目前我遇到了两个问题。In Location::

  • 我的问题是:我想创建一个PNG,它在xy图表上有一个小圆圈的图像。我的圆是一个饼图,所以我可以把它显示为饼图,我想把它放在我想要的图中的任何(x,y)中。我想过XYShapeAnnotation,但是这个圆圈需要分成几个部分,我不想用java图形来做,因为我不知道它,而且我认为我不需要它来满足我的需要。需要注意的是,我不能使用JfreeChart覆盖方法,因为我有两个不同的数据集(XY、Pie)

  • 问题内容: 我在尝试实现的算法周围束手无策。我有两个列表,希望从两个列表中进行特定组合。 这是一个例子。 在这种情况下,输出为: 我的名字可能比数字多,即。这是一个具有3个名称和2个数字的示例: 输出: 问题答案: 注意 :此答案是针对上面提出的特定问题的。如果您来自Google,只是想寻找一种使用Python获得笛卡尔积的方法,或者您可能正在寻找简单的列表理解方法- 请参见其他答案。 假设。然后

  • 我有一个AKKA模型,有一个主管演员,他创造了许多儿童演员。子参与者将处理一个事件并将消息发送到另一个服务(例如Kafka topic)。 目前,我有一个静态共享类,它在子参与者之间共享以发送消息,但在参与者模型中,我认为最好使用参与者来实现这一目的。 我想知道我如何才能创造一个演员,儿童演员可以分享它。如果supervisor actor创建了MessagePublisher actor,那么孩

  • 我使用的是Laravel 5.4,其模型和表格结构如下: 一个用户可以有多个账户 一个帐号可以被多个用户共享 每个账户有多个持有量 因此,用户通过他们的许多帐户间接拥有许多资产。 我需要帮助在用户模型上定义一个称为“持有量”的关系,以获得适用于用户的所有持有量(基于他们所链接的账户)。 我尝试了很多不同的东西,在谷歌上花了很长时间。我可以接近BelongToMany和hasManyThrough,