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

Laravel关系-从多个模型中提取ID

柯建修
2023-03-14

我的表格结构如下:

  1. 公司表(有许多货物,有许多包裹)

创建包条目时,我希望执行以下操作:

$shipment = $order->shipments()->create($request->all());
$package = $shipment->packages()->create();

如果我在$shipping上转储die,那么它在那里有所有正确的ID,并且我希望这些关系会允许创建它。但是,创建包失败,因为没有order_id(orders表中的id)的值

我是否误解了雄辩在这里的作用?

编辑:

命令

Schema::create('orders', function (Blueprint $table) {
    $table->uuid('id');
    $table->uuid('company_id');
    $table->uuid('order_address_id');
    $table->integer('user_id');
    $table->string('unique_id');
    $table->string('order_ref')->default('');
    $table->string('status');
    $table->boolean('hold_or_cancel')->default(0);
    $table->string('shipping_method');
    $table->dateTime('completed_at')->nullable();
    $table->timestamps();
    $table->unique(array('company_id', 'unique_id'));

装运

Schema::create('shipments', function (Blueprint $table) {
    $table->uuid('id');
    $table->uuid('order_id');
    $table->uuid('company_id');
    $table->string('status')->default('new');
    $table->string('shipment_type');
    $table->string('shipping_method')->default('');
    $table->string('reference')->default('');
    $table->timestamps();
});

包裹

Schema::create('shipment_packages', function (Blueprint $table) {
    $table->uuid('id');
    $table->uuid('order_id');
    $table->uuid('company_id');
    $table->uuid('shipment_id');
    $table->string('tracking_number')->default('');
    $table->integer('package_weight_g')->nullable();
    $table->integer('package_length_cm')->nullable();
    $table->integer('package_width_cm')->nullable();
    $table->integer('package_height_cm')->nullable();
    $table->timestamps();
});

为了创建一个订单,我使用以下工作正常。

$address = OrderAddress::create($data);
$order = $address->order()->create($data);

要创建我试图使用的货件和包裹:

DB::transaction(function () use ($order, $request) {
    $shipment = $order->shipments()->create($request->all());
    $package = $shipment->shipmentPackages()->create();
});

然而,我不能通过拉公司或订单ID使用这种方法,我想这样做,以便容易地看到属于订单或公司的货物和包裹的列表,即装运物品到订单和公司。对于出货包来说,这属于一个出货,一个订单,一个公司。

经过深思熟虑,也许我正试图将每张表与太多的事情联系起来。我的理由是“如果我想找出一家公司发货的所有包裹,那么我应该在包裹表中包含该公司的id”。然而,也许最好的办法是看看哪些货物是由该公司所有的,然后从那里开始处理包裹。

共有1个答案

富凯风
2023-03-14

看起来您的关系是错误的,订单id应该在装运表中,因此它与订单上的id相关。

 类似资料:
  • 我正在构建一个小应用程序,以便在Laravel7中试验多对多关系。此应用程序涉及项目和用户(多对多)。 经过身份验证的用户可以创建新项目。每个项目都有自己的页面。在项目页面上,将呈现一个列表,其中包含作为该项目成员的每个用户的名称,在每个名称旁边是一个按钮,该按钮将从该项目中删除特定用户/成员。 现在,我被困在“删除用户”功能上。我不明白如何获取列表中每个用户的id,并将其传递给将“分离”多对多关

  • 我正在学习拉威尔,有一件事我无法解决。 我有什么: 用户、帖子、评论及相应模型表 使用者php:

  • 我正在尝试使用Laravel雄辩的模型查询多个表,这些模型具有一对一、一对多和多对多的关系。 我有一个表,一个表,一个表和一个透视表。 每个表单有一个品牌和一个用户: 品牌没有任何外键: 用户没有任何外键: 有一个数据透视表可以创建多对多的关系,用于创建拥有许多用户(如品牌成员)的品牌组: 我试图通过直接所有权()或品牌成员身份获取属于用户的所有表单,通过多对多透视表获取用户所属的所有品牌的所有表

  • 我有三张桌子 书籍:-id-姓名-已删除 帖子:-id-图书id-连接-删除地址 评论:-id-帖子id-评论-已删除 一本书有很多帖子,一篇帖子有很多评论。 当我删除一本书时,我想删除与该书相关的帖子和评论。我已经在所有模型中添加了关系,所有表都使用SoftDelete,并尝试在Laravel中使用事件 当我尝试删除一本书时: 书籍和帖子已删除,但评论不会被删除。我可以用Laravel事件删除评

  • 我在为我的项目中的搜索函数编写雄辩的查询时遇到了问题。以下是我的数据库表/模型: 一个艺术家有许多艺术作品,一个艺术作品有许多风格,也有许多艺术家。我已经验证了这些关系是否正常工作。我也有一个简单的形式,返回id作为一个请求与变量和。 因此,我想在函数中做两件事:首先,检查请求中的变量是否已设置(我已经可以这样做了)。然后,使用ELOQUENT根据表单的结果查询模型。 这里有一个例子:用户搜索米开

  • 简介: 我有这些表与他们的模型: 地址表-- 规则: 每个用户只能有一个地址 这里可以进行两种可能的关系规划: > 用户有一个地址和地址属性To User[即一对一关系],但缺点是外键位于地址表中,即user_id字段,通过与其他模型[公司和财产]重复相同的关系,我们将获得地址表中的另外两个外键是[company_id和property_id],那么我们将最终得到3个外键用于3个型号,但每行记录只