вставлять данные в две таблицы с единой формой. Laravel: ошибка нарушение ограничения целостности - PullRequest
1 голос
/ 25 мая 2020

Итак, я хотел бы знать, как вставить данные в две разные таблицы, но связать, Table Poste (предложение, объявление) и компанию, каждое объявление является ссылкой на компанию, я создал две модели и только 1 контроллер, сообщение и компанию и Postecontroller.

Schema::create('entreprises', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('nomEntreprise');
            $table->string('adresseEntreprise');
            $table->timestamps();
        });
Schema::create('postes', function (Blueprint $table) {
            $table->increments('idPoste');
            $table->unsignedBigInteger('idEntreprise');
            $table->string('nomPoste');
            $table->text('descriptionPoste');
            $table->timestamps();
            $table->foreign('idEntreprise')
                ->references('id')
                ->on('entreprises')
                ->onDelete('cascade');

        });
public function create()
    {
        $postes = Poste::all();
        $entreprises = Entreprise::all();
        return view('postes.create', compact('postes','entreprises'));
    }

public function store(Request $request)
    {
        $data = $request->validate([
            'nomPoste'=>'required|min:3',
            'descriptionPoste'=>'required|min:3'
        ]);
        $data2 = $request->validate([
            'nomEntreprise'=>'required|min:3',
            'adresseEntreprise'=>'required|min:3'
        ]);
        Poste::create($data);
        Entreprise::create($data2);



        return back();
    }
class Poste extends Model
{


    protected $fillable = ['nomPoste','descriptionPoste','idEntreprise'];

    public function entreprise()
    {
        return $this->belongsTo(Entreprise::class,'idEntreprise');
    }
}
protected $fillable = ['nomEntreprise', 'adresseEntreprise'];

    public function poste()
    {
        return $this->hasMany(Poste::class);
    }

, когда я вставляю данные через фабрику, он работает хорошо, потому что мне удается отобразить сообщение с его компанией по идентификатору. но из-за вставки у меня возникла ошибка, например: Нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (projetetudiant.postes, CONSTRAINT postes_identreprise_foreign FOREIGN KEY (idEntreprise) REFERENCES entreprises (id) ON DELETE CASCADE) .

Я новичок и только что решил загрузить laravel, а я уже застрял, так что, пожалуйста, действительно нужна помощь! извините за мой engli sh я французский чувак.

1 Ответ

0 голосов
/ 25 мая 2020

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

Ваша функция магазина станет:

public function store(Request $request)
{
    $data = $request->validate([
        'nomPoste'=>'required|min:3',
        'descriptionPoste'=>'required|min:3'
    ]);
    $data2 = $request->validate([
        'nomEntreprise'=>'required|min:3',
        'adresseEntreprise'=>'required|min:3'
    ]);

    $newEnterprise = Entreprise::create($data2);
    Poste::create($data + [
        'idEntreprise' => $newEnterprise->id
    ]);

    return back();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...