我有一个关于关系的问题。我有一个活动模型和控制器。我想我搜索了很多,我找到了一个附加的方法。但不知道如何使用它。
我有一个这样的活动表:
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();
});
现在我不知道如何将这两个表联系起来。我想做什么? •
我有一个成型刀片。输入 标题、公司名称、价格、描述、视频输入、文件输入。 (http://prntscr.com/10nyfd1 )
当我创建一个新活动时(标题、公司名称、价格、描述) 我想添加到视频和图像 URL 以添加活动资产表 带有活动 ID。
简短摘要:当我创建一个新活动时,如何添加其他字段,将其添加到带有activity_id 的activity_asset 表中。
非常感谢。
答案 0 :(得分:1)
试试这个
首先,创建一个活动。
$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);
答案 1 :(得分:0)
数据透视表用于多对多关系。但是对于您的情况,您有一对多的关系。而且不需要数据透视表。
多对多关系的典型例子是文章和标签。其中 1 篇文章可以有多个标签,而 1 个标签可以属于多篇文章。
但是您的示例是一对多关系。其中 1 个活动可以有多个活动资产,而 1 个活动资产可以有一个活动。在这种情况下,您不需要数据透视表。
答案 2 :(得分:0)
也许这对你有帮助
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');
}