【问题标题】:Restriction on duplicate entry with respect to another column entry限制相对于另一列条目的重复条目
【发布时间】:2019-04-28 07:32:57
【问题描述】:

我有两个型号 MemberSaving

Member('id','name')
Saving('id','member_id','amount','month')

我必须限制在给定月份保存成员的重复输入。

会员.php

class Member extends Model
{
protected $fillable=['name','address','phone']; 
public function loan()
{
    return $this->hasOne(Loan::class,'member_id','id');
}
public  function savings()
{
    return $this->hasMany(Saving::class,'member_id','id');
}
}

Saving.php

namespace App;
use Illuminate\Database\Eloquent\Model;
class Saving extends Model
{
protected $fillable=['amount','month','member_id']; 
 public function member()
{
    return $this->belongsTo('App\Member','member_id','id');
} 
}

是否可以使用模型或控制器中的函数来实现限制? 编辑: 这就是我尝试的方式。 SavingController.php

    public function addSaving(Request $request){
    if($request->isMethod('get')){
        $memberData = Member::all();
        return view($this->_pagePath.'saving.addsaving',compact('memberData')); 
        //return redirect()->back();
    }
    if($request->isMethod('post')){
        $this->validate($request,[
            'amount' => 'required',
            'month' => 'required'
        ]);
        $data['amount'] = $request->amount;
        $data['month'] = $request->month;
        $data['member_id']= $request->name;
        $member= Member::find(1);
        if($member->savings()->where('month',$request->month)->exists())
        {
          return 'Savings for this month are already added.';
        }
        else
        {
        if(DB::table('savings')->insert($data)){
            return redirect()->route('saving')->with('success','data was successfuly inserted');
        }
    }
                }
 }

【问题讨论】:

  • month 字段的类型是什么?是date 还是只是一个数字?
  • return $this->hasMany(Saving::class,'member_id','id')->where('month',$value);您可以将 where 子句链接到关系方法
  • 这只是枚举值@nakov
  • @AhmedAboud 你能帮我完成吗?

标签: database laravel eloquent criteria


【解决方案1】:

我的朋友,枚举是月份的错误列,除非您不关心年份。因为这样您就可以存储每个月的储蓄,而不是单独存储每年。

您的关系设置正确,因此您可以像这样进行检查:

// considering you have the specific member selected
$member = Member::find('ID_OF_THE_MEMBER');
if($member->savings()->where('month', APRIL)->exists())
{
    return 'Savings for this month are already added.';
}

【讨论】:

  • 在插入保存时添加此代码?在 saveController 中?
  • 是的,在你保存之前,这会阻止,除非它满足条件。
  • 我真的应该使用 'April' 还是 $value ?无论如何它都会给出错误:: $member is undefined.
  • 您应该使用$value 来表示数据库中存储的月份。我向您展示了更多/更少的伪代码,告诉您如何解决这个问题,我的朋友,没有给您确切的解决方案,您只需复制粘贴就可以了,这就是我在代码中留下评论的原因。当您为给定成员添加新的储蓄时,您有他的 ID 吗?如果这样做,那么您将需要获取相同的成员并检查它是否存在。我现在将编辑我的答案。
  • 是的,我确实明白了。我只是不确定如何访问成员,尽管我有 id
猜你喜欢
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
  • 2011-08-15
  • 2010-11-20
  • 1970-01-01
  • 2020-08-12
  • 1970-01-01
相关资源
最近更新 更多