gpt4 book ai didi

php - Laravel - 一个节目可以有多个提供者

转载 作者:行者123 更新时间:2023-12-02 12:27:44 25 4
gpt4 key购买 nike

所以我正在尝试找到解决方案,但不确定具体如何做到这一点。我有一张表存储所有发生的节目。在给定的节目中,我可以让多个提供者参加该节目。提供商也可以参加许多演出。那么我如何将其存储在数据库中并进行 Eloquent 关系呢?

显示架构

Schema::create('shows', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->integer('number')->unsigned();
$table->dateTime('airDate');
$table->string('podcastUrl')->nullable();
$table->timestamps();
});

提供者架构

Schema::create('providers', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('shortName')->nullable();
$table->string('image')->nullable();
$table->string('social')->nullable();
$table->timestamps();
});

我会将provider_id存储在节目架构中吗?

更新1

所以我为数据透视表创建了一个新的迁移

Schema::create('provider_show', function (Blueprint $table) {
$table->integer('provider_id')->unsigned()->index();
$table->foreign('provider_id')->references('id')->on('providers')->onDelete('cascade');
$table->integer('show_id')->unsigned()->index();
$table->foreign('show_id')->references('id')->on('shows')->onDelete('cascade');
$table->primary(['provider_id', 'show_id']);
});

然后在展示模型中我创建了以下内容

public function providers()
{
return $this->belongsToMany(Provider::class);
}

现在,当我保存新节目时,我添加了多项选择来选择我想要的提供商

$show = new Show;
$show->name = $request->name;
$show->number = $request->number;
$show->airDate = $request->airDate;
$show->podcastUrl = $request->podcastUrl;
$show->providers()->attach($request->providerList);

$show->save();

Session::flash('message', "Created Successfully!");

return back();

然后当我保存时出现以下错误

SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: provider_show.show_id (SQL: insert into "provider_show" ("provider_id", "show_id") select 1 as "provider_id", as "show_id" union all select 2 as "provider_id", as "show_id")

最佳答案

创建一个 provider_show 迁移,它将充当您的数据透视表。该表将包含 provider_idshow_id,这将提供这些实体之间的多对多关系。

然后在您的 Provider 模型上,您可以提供一个 shows() 方法,该方法返回 BelongsToMany 关系。

// In your Provider model
public function shows()
{
return $this->belongsToMany('App\Show');
}

请注意,Laravel 默认情况下会根据两个关系的字母顺序查找数据透视表名称。

您还可以通过提供也返回 BelongsToMany 关系的 providers() 方法,在 Show 模型上添加逆函数。

关于php - Laravel - 一个节目可以有多个提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41309274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com