Laravel Eloquent 多对多,增量依赖
Posted
技术标签:
【中文标题】Laravel Eloquent 多对多,增量依赖【英文标题】:Laravel Eloquent many to many with increment which is dependent 【发布时间】:2021-12-21 10:01:11 【问题描述】:我有一个客户模型和一个具有多对多关系的位置模型 (Postgres)。 现在我还需要一个增量编号,它是某个位置内客户的 ID。
示例customers_locations
表:
等等。
所以customer_location_internal_number
应该告诉某个位置内客户的 ID。当我将客户添加到某个位置时,它应该将该数字增加 1。
有没有办法在一个表中执行此操作,还是我需要另一个查找表?
迁移看起来像这样:
public function up()
Schema::create('customers_locations', function (Blueprint $table)
$table->id();
$table->bigInteger('customer_id');
$table->bigInteger('location_id');
$table->bigInteger('customer_location_internal_number');
$table->timestamps();
$table->foreign('customer_id')
->references('id')
->on('customers')
->onUpdate('cascade')
->onDelete('cascade');
$table->foreign('location_id')
->references('id')
->on('locations')
->onUpdate('cascade')
->onDelete('cascade');
);
【问题讨论】:
你用这个customer_location_internal_number
做什么?由于id
存在并且自动递增,所以这个额外的自动递增(或手动递增)列是否真的有用?您可以从以下id
s 中为location_id: 1
推断出类似的信息:1, 3, 4, 6
与列将包含的内容,即1, 2, 3, 4
(请注意,每个都大于上一个,只是在id
与customer_location_internal_number
没有空白)
是的,它确实是有目的的。我们需要它作为多租户应用程序的内部标识符。
【参考方案1】:
您可以使用newPivotQuery 来执行此操作,此方法为数据透视表创建一个新的查询生成器。
例如:
$location=getLocation();
$customer=getCustomer();
$location->users()->sync([$user->id]);
$location->users()->newPivotQuery()->where('customer_id',$customer->id)
->where('location_id',$location->id)->increment('customer_location_internal_number');
【讨论】:
以上是关于Laravel Eloquent 多对多,增量依赖的主要内容,如果未能解决你的问题,请参考以下文章
查询 Laravel Eloquent 多对多,其中所有 id 都相等
Laravel (8.x) 这个多对多过滤问题有更好的 Eloquent 查询吗?