首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >透视表中具有列的Laravel多对多

透视表中具有列的Laravel多对多
EN

Stack Overflow用户
提问于 2018-10-20 17:07:04
回答 2查看 103关注 0票数 0

我有3个表:工人,付款和私人私人可以支付一个或多个工人,工人可以收到一个或多个私人付款。payments表包含2个外键和金额。如何使用laravel在3个表中创建关系,以获取数据库中的所有信息?例如,我想要为每个工人提供他从每个私人获得的付款。

EN

回答 2

Stack Overflow用户

发布于 2018-10-20 17:24:08

我猜你已经知道幼体关系了。

Worker.php

代码语言:javascript
复制
public function privates()
{
    return $this->belongsToMany('App\Private')->withPivot('amount');
}

Private.php

代码语言:javascript
复制
public function workers()
{
    return $this->belongsToMany('App\Worker')->withPivot('amount');
}

然后在你的控制器中

代码语言:javascript
复制
$private = Private::create();
$worker = Worker::create();
$amount = 1000;
$private->workers()->attach($worker->id, ['amount' => '$amount']);
                                            ^^^-column in your payment table.
票数 0
EN

Stack Overflow用户

发布于 2018-10-20 17:35:49

这就是如何定义WorkerPrivate之间的many to many关系

工作者模型

代码语言:javascript
复制
public function privates()
{
    return $this->belongsToMany(Private::class, 'payments', 'worker_id', 'private_id')
        ->withPivot('amount');
}

专用模型

代码语言:javascript
复制
public function workers()
{
    return $this->belongsToMany(Worker::class, 'payments', 'worker_id', 'private_id')
        ->withPivot('amount');
}

这就是检索worker的所有privates的方法

控制器函数

代码语言:javascript
复制
$privates = $worker->privates;
// this '$privates' contains the 'pivot' table values which contains the 'amount'.

这就是你节省金额的方法。

控制器函数

代码语言:javascript
复制
// first $private and $worker need to have saved.
// and then attach particular $worker as below.
$private->attach($worker_id, ['amount' => 1200.00]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52904048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档