gpt4 book ai didi

laravel - 在创建时从多对多方法附加到所有可能的关系?

转载 作者:行者123 更新时间:2023-12-02 18:56:20 25 4
gpt4 key购买 nike

我有两个名为 Position 和 Event 的模型,它们彼此之间具有多对多关系。

  • 事件:
<?php

class Event extends Model
{
protected $fillable = [
'name', 'opta_id'
];

public function positions() {
return $this->belongsToMany(Position::class);
}
}
  • 职位:
class Position extends Model
{
protected $fillable = [
'name', 'short_name'
];

public function events() {
return $this->belongsToMany(Event::class);
}
}

每个事件都应该有一个针对数据库中当前每个位置的数据透视条目,没有异常(exception)。因此,每次用户创建新的事件时,我都想为每个现有的位置创建一个数据透视条目。

我正在努力使用文档和 SO 来解决这个问题。我可以使用sync() 或attach() 通过显式命名数据库中所有位置的ID 来建立连接。在 EventControllerstore 方法中:

$data = $request->all();
$event = Event::create($data);
$event->positions()->sync([1, 22, 34, 167]);

但要使其发挥作用,我首先必须从 positions 表中获取所有条目,将它们格式化为 ID 数组,然后将它们传递给此方法。是否有任何内置或规范的方法可以做到这一点?

最佳答案

没有内置方法,但手动解决方案很短:

$event->positions()->attach(Position::pluck('id'));

attach()sync() 更高效,因为它在单个查询中插入所有数据透视记录。

关于laravel - 在创建时从多对多方法附加到所有可能的关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55610971/

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