【问题标题】:Laravel eloquent 仅分离 1 条记录
【发布时间】:2022-01-20 11:52:41
【问题描述】:

我正在尝试创建可以将多个座位附加到 1 个预订中的预订

附加座位效果很好,我可以将许多具有相同 ID 的座位附加到同一个预订中,尽管当我只想分离一个座位时,每个座位都会被分离。

添加座位示例:

public function addReservationSeat() {
    
    $data = request()->validate([
        'r_id' => 'required',
        'seat_id' => 'required'
    ]);

    $reservation = Reservation::find($data['r_id']);

    $seat = Seat::find($data['seat_id']);

    $reservation->seats()->attach($seat);

    return response(200);

}

拆卸座椅示例:

public function removeReservationSeat() {
    
    $data = request()->validate([
        'r_id' => 'required',
        'seat_id' => 'required'
    ]);

    $reservation = Reservation::find($data['r_id']);

    $seat = Seat::find($data['seat_id']);

    $reservation->seats()->detach($seat);

    return response(200);

}

总而言之,座位可以是相同的,相同的 id,但座位的数量可能是 10,所以我可以将多个座位附加到同一个预订中,尽管当我分离时,每个具有相同 id 的座位都会得到与保留分离。

可以只拆1个座位吗?

【问题讨论】:

  • 您是否有多行具有相同的r_idseat_id?如果是这样,使用传递的$seat 调用detach() 将删除所有这些行。如果您只有一行,并且有一个额外的 quantity 列,例如,您可以将该列从 10 递减到 9,但这不是分离调用,而是updateExistingPivot() 调用。我认为您可能需要稍微重构一下您的数据库结构。
  • 在一次预订中怎么可能有超过 1 个相同的座位? (就像在现实中一样)......只是想弄清楚“座位”或“预订”的范围在这个等式中的实际含义
  • 一个酒吧有很多摊位,你可以预订4个摊位,所以4个摊位附在预订上,附上作品,另一方面分离不。所以,是的,我可能不得不重构我的数据库结构,这是主要的想法,我只是因为某种原因分离会作为附加。
  • 那么 4 个座位,4 个座位怎么会有相同的 'id'?它们是独特的独特事物
  • 您可以附加和分离座位,但数量问题是因为分离会删除记录,它不会更新字段......如果它们是唯一实体,它会正常工作

标签: laravel eloquent


【解决方案1】:

我不得不放弃无法使用的多对多关系附加和分离方法。 所以我创建了另一个名为 ReservationSeat 的模型和迁移,它与座位和预订有关系,所以每当我想将座位“附加”到预订时,我只需在 ReservationSeat 表中创建它,并分别在我想“分离”时创建它" 我只是删除了具有相同预订和座位 ID 的记录。

为预订附加/创建座位:

 $reservation = Reservation::find($data['r_id']);

    $seat = Seat::find($data['seat_id']);

    ReservationSeat::create([
        'reservation_id' => $reservation->id, 
        'seat_id' => $seat->id
    ]);

从预订中分离/删除座位

        $reservation = Reservation::find($data['r_id']);

        $seat = Seat::find($data['seat_id']);

        ReservationSeat::where('reservation_id', $reservation->id)->
                         where('seat_id', $seat->id)->first()->delete();

多对多关系的逻辑相同,但方法不同。

【讨论】:

  • 顺便说一句,您仍然可以在已设置的相同关系上使用 attach,因为您仍然拥有数据透视表并且您正在做与 attach 正在做的事情相同的事情,这只是概念这里不同的“分离”
  • 现在没有理由附上,因为我采用了不同的方法,它也做了同样的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-24
  • 1970-01-01
  • 2019-06-23
  • 1970-01-01
  • 1970-01-01
  • 2016-05-04
相关资源
最近更新 更多