laravel Nova属于多个字段:无法更新附加的产品,下拉菜单被禁用

70gysomp  于 2022-12-24  发布在  其他
关注(0)|答案(2)|浏览(101)

bounty将在2天后过期。回答此问题可获得+50声望奖励。Adrenaxus希望引起更多人关注此问题。

我在Nova模型中定义了UsersProducts之间的BelongsToMany关系:
BelongsToMany::make('Products'), //user has many products
基础模型UserAthlete也都具有以下关系:

//User.php
public function products()
{
    return $this->belongsToMany(Product::class);
}

//Product.php
public function users()
{
    return $this->belongsToMany(User::class);
}

当我尝试更新附加的产品时,下拉字段被禁用,我无法更改它。
这是BelongsToMany关系的默认行为吗?我是否应该删除产品并添加新的(正确的)产品?

up9lanfz

up9lanfz1#

您是否在模型中定义了关系?在您的情况下,我希望在用户模型中包含以下内容:

public function products()
{
    return $this->belongsToMany(Product::class);
}

然后,在用户资源中,只需输入以下内容:

BelongsToMany::make('Products'),

这将导致您可以访问用户资源中的产品选择框,不,它们显示为灰色不是默认行为。
如果这是你目前所拥有的,但你仍然得到这种行为,然后张贴您的代码,否则很难帮助:)。

gfttwv5a

gfttwv5a2#

要在BelongsToMany关系中更新,需要删除旧关系,然后附加新关系。

$user = User::find($id); // get user
$user->products()->detach($oldProductId);// remove old 
$user->products()->attach($newProductId);// attach new

也可以使用sync()

$user->products()->sync([$newProductId]); // this will do both at once(remove and update)

相关问题