【问题标题】:Laravel | How to use Pivot table with Relationship拉拉维尔 |如何在关系中使用数据透视表
【发布时间】:2021-06-14 14:20:54
【问题描述】:

我对这段关系有疑问。我有一个活动模型和控制器。我想我搜索了很多,我找到了一个附加的方法。但不知道如何使用它。

我有一个这样的活动表:

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 以添加 activity_asset 表 带有活动 ID。

简短总结:当我新建一个activity时,如何添加其他字段添加到activity_asset表中,并带有activity_id。

非常感谢。

【问题讨论】:

标签: php laravel eloquent


【解决方案1】:

数据透视表用于多对多关系。但是对于您的情况,您具有一对多的关系。并且不需要数据透视表。

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

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

【讨论】:

  • 没错。那么我的下一步是什么?坦率地说,我很困惑。好的,表格没有旋转,但我该怎么做呢?我需要为 activity_asset 创建一个新模型?
  • 您在提交表单时获得了所有数据?如果是的话,我会把代码发给你。
  • 是的,我的表单都是这样的数据:prnt.sc/10nyfd1。我的意思是当我创建新活动时,我想将图像和视频 url 添加到带有 activity_id 的 activity_asset 表中。
  • 你可以试试上面的代码:- stackoverflow.com/a/66670403/12213896
  • 我正在尝试。我让你知道这是否可行,但非常感谢所有帮助:)。
【解决方案2】:

试试这个

首先,创建一个活动。

$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);

【讨论】:

  • 感谢大家的帮助!!这对我来说确实有用:) 当然我自定义了一些字段。再次非常感谢。
【解决方案3】:

也许这对你有帮助

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

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

在您的活动模型中:

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

【讨论】:

    猜你喜欢
    • 2018-07-27
    • 2019-02-21
    • 2018-10-01
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 2018-07-20
    相关资源
    最近更新 更多