У меня есть 2 таблицы beneficiaries
и addresses
, соединенные с отношением beneficiary_id
в качестве внешнего ключа, в то время как каждая запись получателя должна иметь только 1 адрес.
Записи дублируются или не могут быть вставлены request()
во второй таблице.
Когда я использую код ниже, записи дублируются
public function update(UpdateBeneficiaryRequest $request, Beneficiary $beneficiary, Address $address)
{
abort_unless(\Gate::allows('beneficiary_edit'), 403);
$beneficiary->update($request->all());
// $address->update($request->all());
$address->fill([
'beneficiary_id' => $beneficiary->id,
'country' => request('country'),
'state' => request('state'),
'district' => request('district'),
'town' => request('town'),
'street' => request('street'),
'building' => request('building'),
'nearby' => request('nearby')
]);
//->where('id',$id);
//$address->save();
$beneficiary->addresses()->save($address);
return redirect()->route('admin.beneficiaries.index');
}
Однако, когда я изменяю код для получения всех запросов, я получаю ошибку
public function update(UpdateBeneficiaryRequest $request, Beneficiary $beneficiary, Address $address)
{
abort_unless(\Gate::allows('beneficiary_edit'), 403);
$beneficiary->update($request->all());
$address->update($request->all());
//->where('id',$id);
//$address->save();
$beneficiary->addresses()->save($address);
return redirect()->route('admin.beneficiaries.index');
}
Сообщение об ошибке:
SQLSTATE [HY000]: общая ошибка: 1364 Поле «страна» не имеет значения по умолчанию (SQL: вставить в addresses
(beneficiary_id
, * 1020)*, created_at
) значения (1, 2019-12-02 02:07:27, 2019-12-02 02:07:27))
Во втором варианте запрос не выполняетсяотправлено в соответствии со структурой таблицы
структура таблицы получателей
структура таблицы адресов
Как избежать дублирования записей при обновлении формы и получить все запросы для вставки в нужные таблицы.
Я также использовал update()
и updateOrCreate()
функции, однако обе закончились одним и тем же результатом
Обратите внимание, что в настоящее время я использую 2 таблицы, в то время как цель использовать 5 таблиц для 1 формы.
РЕДАКТИРОВАТЬ: поля обязательные для заполнения не могутbe NULL
Добавлен класс UpdateBeneficiaryRequest
namespace App\Http\Requests;
use App\Beneficiary;
use Illuminate\Foundation\Http\FormRequest;
class UpdateBeneficiaryRequest extends FormRequest
{
public function authorize()
{
return \Gate::allows('beneficiary_edit');
}
public function rules()
{
return [
'name' => [ 'required',],
'lname' => [ 'required',],
'father' => [ 'required',],
'mother' => [ 'required',],
'dob' => [ 'required',],
'phone' => [ 'required',],
'record_no' => [ 'required',],
'country' => [ 'required',],
'state' => [ 'required',],
'district' => [ 'required',],
'town' => [ 'required',],
'street' => [ 'required',],
'building' => [ 'required',],
'nearby' => [ 'required',],
];
}
}