Laravel-Как вставить во многие-многие связанные таблицы уже созданные внешние ключи в mysql? - PullRequest
0 голосов
/ 02 октября 2018

При отправке формы выдается ошибка: Нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено (portal_job.applicant_job, CONSTRAINT Applic_job_applicant_user_id_foreign FOREIGN KEY (Applic_user_id) REFERENCES DELETE CASE Заявители (идентификатор)(SQL: вставьте в значения Applicant_job (Applicant_user_id, созданный_кат, job_id, updated_at) (4, 2018-10-01 23:46:56, 2, 2018-10-01 23:46:56))

Как я могу сделать вставку в две связанные таблицы?В этом случае было бы много-много отношений.Я не знаю, может ли проблема вызвать создание отношений на MySQL заранее ... если вам нужна дополнительная информация, дайте мне знать, пожалуйста.Я не знаю, что еще делать, потому что я уже пытался сделать это с помощью attach () и был бесполезен.Получил ту же ошибку.

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

public function store(Request $request, $id) {
    $this->validate($request, [
          'application_letter' => 'required'
      ]);
    $applicant = new Applicant;
    $applicant->application_letter= $request->input('application_letter');
    $applicant->job_id = $request->input('job');
    $applicant->state = 'pending';
    $applicant->user_id = auth()->user()->id;

    $applicant->save();
    $applicant->jobs()->sync([$id],false);

    return redirect("userdashboard");
  }

Это модели отношений между таблицами

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Applicant extends Model
{
     protected $primaryKey = 'user_id';

     public $incrementing = false;



      function jobs() {
          return $this->belongsToMany('App\Models\Job')->withTimeStamps();
      }

      function user() {
        return $this->belongsTo('App\Models\User','user_id');
     }

     function profile() {
        return $this->hasOne('App\Models\Profile', 'profile');
     }
}
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Job extends Model
{


  function category() {
   return $this->belongsTo('App\Models\JobCategory');
}
function user() {
   return $this->belongsTo('App\Models\User','user_id');
}

function applicants() {
     return $this->belongsToMany('App\Models\Applicant', 'applicant_job', 'job_id', 'applicant_user_id')->withTimeStamps();
 }
}

Это миграции с соответствующими внешними ключами, используемыми для этой части задачи.

Schema::create('applicants', function (Blueprint $table) {
            $table->increments('id');
            $table->text('application_letter');
            $table->string('state');
            $table->timestamps();
            $table->integer('user_id')->unsigned();
            $table->integer('job_id')->unsigned();
            $table->foreign('job_id')->references('id')
            ->on('jobs')
            ->onDelete('cascade');
            $table->foreign('user_id')->references('id')
                ->on('users')
                ->onDelete('cascade');

        });
  Schema::create('applicant_job', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('applicant_user_id')->unsigned();
            $table->integer('job_id')->unsigned();
            $table->timestamps();
            $table->foreign('applicant_user_id')->references('id')
                ->on('applicants')
                ->onDelete('cascade');
            $table->foreign('job_id')->references('id')
            ->on('jobs')
            ->onDelete('cascade');
        });
Schema::create('jobs', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->text('body');
            $table->decimal('payment');
            $table->integer('category_id')->unsigned();
            $table->string('position_type');
            $table->string('duration_project');
            $table->integer('user_id')->unsigned();
            $table->timestamps();
            $table->foreign('user_id')->references('id')
                ->on('users')
                ->onDelete('cascade');
                $table->foreign('category_id')->references('id')
                    ->on('job_category')
                    ->onDelete('cascade');

        });

Это делается для портала небольшой работы.Если вам нужна дополнительная информация, не стесняйтесь спрашивать.

1 Ответ

0 голосов
/ 03 октября 2018

Для вставки / сохранения вы должны использовать attach ();$ parentTable-> jobs () -> attach ($ arrayVariable);

Для обновления используйте: sync();
Для удаления нескольких: detach();

...