繁体   English   中英

Laravel | 如何使用 Pivot 表与关系

[英]Laravel | How to use Pivot table with Relationship

我有一个关于关系的问题。 我有一个活动 model 和 controller。 我想我搜索了很多,我找到了一个附加的方法。 但是我知道如何使用它。

我有一个这样的活动表:

Schema::create('activities', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('title');
        $table->string('company_name');
        $table->string('price');
        $table->string('description');
        $table->timestamps();
    });

另一个表是activity_asset,如下所示:

Schema::create('activity_asset', function (Blueprint $table) {
        $table->foreignId('activity_id')->constrained();
        $table->string('image')->nullable();
        $table->string('video')->nullable();
        $table->timestamps();
    });

现在我不知道如何关联这两个表。 我想做什么?

  1. 我有一个表格刀片。 输入标题、公司名称、价格、描述、视频输入、文件输入。 ( http://prntscr.com/10nyfd1 )

  2. 当我创建一个新活动(标题、公司名称、价格、描述)时,我想添加到视频和图像 URL 以添加带有活动 ID 的活动资产表。

简短摘要:当我创建一个新活动时,如何将其他字段添加到带有 activity_id 的 activity_asset 表中。

非常感谢。

尝试这个

首先,创建一个活动。

$activity =  new Activity;
$activity->title = $request->title;
$activity->company_name = $request->company_name;
$activity->price = $request->price;
$activity->description = $request->description;
$activity->save();

foreach ($request->image as $key => $value) {
    $image[] = array(
        'activity_id'         => $activity->id,
        'image'             => $value,
    );
}
ActivityAsset::insert($image);

foreach ($request->video as $key => $value) {
    $video[] = array(
        'activity_id'         => $activity->id,
        'video'             => $value,
    );
}
ActivityAsset::insert($video);

Pivot 表用于多对多关系。 但是对于您的情况,您具有一对多的关系。 并且不需要 pivot 表。

多对多关系的典型示例是文章和标签。 其中 1 篇文章可以有多个标签,1 个标签可以属于多个文章。

但是您的示例是一对多的关系。 其中 1 个活动可以有多个 activity_asset,而 1 个 activity_asset 可以有一个活动。 在这种情况下,您不需要 pivot 表。

也许这可以帮助你

public function method()
{
    $activity = Activity::find(1);

    $asset = $activity->assets()->create([
       'image' => 'url',
       'video' => 'url',
    ]);
}

在您的活动 model 中:

public function assets()
{
   return $this->hasMany('activity_asset', 'activity_id');
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM