任务表、作业表、报工表,报工表在保存数量时,同时根据报工的产品id查询工序参数并计算报工标准工时、报工成本数据,并同时保存,如果不良数字段有值的话,需要累加到任务表、作业表的不良字段。如何在thinkphp5模型中实现?
时间: 2024-03-11 11:50:46 浏览: 14
可以通过ThinkPHP5模型中的关联查询和模型事件来实现该需求。
首先,在模型中定义任务表、作业表、报工表之间的关联关系,例如:
```php
namespace app\model;
use think\Model;
class Task extends Model
{
// 与作业表的一对多关联
public function jobs()
{
return $this->hasMany('Job', 'task_id');
}
}
class Job extends Model
{
// 与任务表的多对一关联
public function task()
{
return $this->belongsTo('Task', 'task_id');
}
// 与报工表的一对多关联
public function reports()
{
return $this->hasMany('Report', 'job_id');
}
}
class Report extends Model
{
// 与作业表的多对一关联
public function job()
{
return $this->belongsTo('Job', 'job_id');
}
// 与产品表的一对一关联
public function product()
{
return $this->hasOne('Product', 'id', 'product_id');
}
}
```
然后,在报工表模型中定义beforeInsert事件,在保存数据前自动计算报工标准工时、报工成本数据,并同时保存。同时,在保存不良数时,也触发任务表和作业表的beforeUpdate事件进行累加处理。
```php
namespace app\model;
use think\Model;
class Report extends Model
{
// ...
// 在保存数据前计算报工标准工时、报工成本数据并保存
public static function onBeforeInsert($report)
{
$product = $report->product;
$params = $product->params;
$report->std_hours = $params->std_hours * $report->qty;
$report->cost = $params->cost * $report->qty;
$report->save();
}
// 在保存不良数时,同时触发任务表和作业表的beforeUpdate事件进行累加处理
public static function onAfterUpdate($report)
{
if ($report->bad_qty > 0) {
$job = $report->job;
$task = $job->task;
$job->bad_qty += $report->bad_qty;
$task->bad_qty += $report->bad_qty;
$job->save();
$task->save();
}
}
}
```
这样,当保存报工表数据时,就会自动计算并保存报工标准工时、报工成本数据,并将不良数累加到任务表和作业表中。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)