做 - >保存到多个关系

时间:2017-11-01 00:36:10

标签: laravel laravel-5 eloquent laravel-5.5

我使用的是Laravel 5.5.13。

我有一个名为Thumb的模型。这个拇指与多对一关系中的两件事有关:PlayerComment

我目前做的事情是这样的:

public function store(Request $request, Entity $entity, Player $player)
{
    $thumb = new Thumb($request->all());
    $thumb->player_id = $player->id;
    $entity->thumbs()->save($thumb);
    return response()->json($thumb, 201);
}

我们看到如何设置$thumb->player_id并且我不必设置entity_id,因为我正在做$entity->thumbs()->save

有办法$entityAndPlayer->thumbs()->save吗?或者是我在推荐方式之上做到的方式?

2 个答案:

答案 0 :(得分:1)

您无法使用关系设置2个外部列,因此您显示的方式是正确的。但是你可以在我看来让它更清洁。

进入Thumb模型,您可以添加:

public function setPlayer(Player $player) 
{
     $this->player_id = $player->id;
}

然后代替:

$thumb->player_id = $player->id;

你可以使用:

$thumb->setPlayer($player);

或者你可以添加create setPlayerAttribute方法,最后代替:

$thumb = new Thumb($request->all());
$thumb->player_id = $player->id;

只使用:

$thumb = new Thumb($request->all() + ['player' => $player]);

答案 1 :(得分:1)

您不能同时保存多个关系,但是对于多对一关联,您可以使用方法associate()Laravel docs)来保存属于部分关系,例如:

public function store(Request $request, Entity $entity, Player $player)
{
    $thumb = new Thumb($request->all());
    $thumb = $thumb->save();

    $thumb->player()->associate($player);
    $thumb->entity()->associate($entity);

    return response()->json($thumb, 201);
}