Ограничение на повторяющуюся запись по отношению к другой записи столбца - PullRequest
1 голос
/ 28 апреля 2019

У меня есть две модели Member и Saving с

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

Я должен ограничить дублирование записи о сохранении члена за данный месяц.

Member.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');
        }
    }
                }
 }

1 Ответ

1 голос
/ 28 апреля 2019

Перечисление - это неправильная колонка для месяца, мой друг, если только тебе нет дела до года.Потому что таким образом вы сможете хранить сбережения для каждого месяца, но не для каждого года в отдельности.

Ваши отношения установлены правильно, поэтому вы можете выполнить проверку следующим образом:

// 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.';
}
...