У меня 2 модели: Employee и FieldReport. Мне нужно создать отношения на основе следующих условий:
Полевой отчет принадлежит сотруднику, чей символ является абсолютным (данные владельца должны отображаться и не могут быть изменены), где поле отчета также имеет , чтобы отметить сотрудников в этом поле отчета.
У самого сотрудника есть много полевых отчетов.
На данный момент я установил связь, примерно такую :
- У сотрудника много полевых отчетов.
- Сотрудник принадлежит ко многим полевым отчетам.
- Полевой отчет принадлежит сотруднику.
- Полевой отчет принадлежит для многих сотрудников.
Тогда у меня возникает проблема, когда PHP не позволяет использовать одно и то же имя метода (в модели Employee). Пример:
- Имеет много имени метода fieldReports ()
- Принадлежит многим также имеет имя метода fieldReports ()
Тогда как если я определяю пользовательское имя функции, я не могу получить значение для заполнения первого столбца сводной таблицы и сгенерировать следующую ошибку:
SQLSTATE [23000]: нарушение ограничения целостности: 19 Ошибка ограничения NOT NULL: field_report_participant. field_report_id (SQL: вставить в "field_report_participant" ("id", "members_id") values (1, 2))
Есть ли какое-нибудь решение? Вот так выглядят мои скрипты:
Employee.php
/**
* Each employee has many fieldReports.
*
* @return \Illuminate\Database\Eloquent\Relationship\HasMany
*/
public function fieldReports()
{
return $this->hasMany(FieldReport::class);
}
/**
* Each employee belongs to many fieldReports.
*
* @return \Illuminate\Database\Eloquent\Relationship\BelongsToMany
*/
public function fieldReports()
{
return $this->belongsToMany(FieldReport::class);
}
FieldReportController.php
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\RequestFieldReport $request
* @return \Illuminate\Http\Response
*/
public function store(RequestFieldReport $request)
{
$fieldReport = $this->data($request, $this->storeImages($request));
$fieldReport->participants()->sync(
$request->participants
);
return response()->json([
'created' => true,
'data' => $fieldReport,
], 201);
}
FieldReport.php
/**
* Each field report belongs to a company.
*
* @return \Illuminate\Database\Eloquent\Relationship\BelongsTo
*/
public function company()
{
return $this->belongsTo(Company::class);
}
/**
* Each field report belongs to a employee.
*
* @return \Illuminate\Database\Eloquent\Relationship\BelongsTo
*/
public function employee()
{
return $this->belongsTo(Employee::class);
}
/**
* Each field report belongs to many participants.
*
* @return \Illuminate\Database\Eloquent\Relationship\BelongsToMany
*/
public function participants()
{
return $this->belongsToMany(Employee::class, 'field_report_participant', 'participant_id', 'id');
}
create_field_reports_table.php
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateFieldReportsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('field_reports', function (Blueprint $table) {
$table->id();
$table->bigInteger('company_id');
$table->bigInteger('employee_id');
$table->string('title', 100);
$table->text('chronology');
$table->json('images')->nullable();
$table->timestamp('closed_at')->nullable();
$table->string('closed_by', 100)->nullable();
$table->timestamp('opened_at')->nullable();
$table->string('opened_by', 100)->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('field_reports');
}
}
field_report_participant_table.php
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateFieldReportParticipantTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('field_report_participant', function (Blueprint $table) {
$table->id();
$table->bigInteger('field_report_id');
$table->bigInteger('participant_id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('field_report_participant');
}
}