Foreign key is null php laravel

129
24 октября 2019, 14:20

Пытаюсь сделать отношения "один ко многим". У меня есть таблицы users и orders

в модели Users есть такой метод:

public function orders()
{
    return $this->hasMany(Orders::class);
}

в ControllerUsers есть такое:

public function store(Request $request)
{
    $id = $this->model::create($request->all())->id; // здесь записывается юзер при регистрации после заказов в таблицу users тут все ок
    $arr = []; // сюда записываю заказы которые пользователь сделал и потом зарегистрировался
    foreach ($request->all()['users_data'] as $el) {
        $arr[] = [
            'user_id' => $id,
            'usluga' =>'фытвлфоытволфыв'
        ];
    }
    $Users = new Users();
    $Users->orders()->createMany($arr);
    return redirect($this->redirectTo);
}

миграция у ordres такая:

public function up()
{
    Schema::create('orders', function (Blueprint $table) {
        $table->integer('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        $table->text('usluga');
    });
}

ошибка на такая:

SQLSTATE[23502]: Not null violation: 7 ERROR: null value in column "user_id" violates not-null constraint
DETAIL: Failing row contains (null, 'фытвлфоытволфыв'). (SQL: insert into "orders" ("user_id", "usluga") values (, 'фытвлфоытволфыв'))

Использую ларавел версии "Laravel Framework 5.7.21"

Что я делаю не так? Почему в user_id null если в dd($id) в методе store точно есть id юзера

В классе Orders в $fillable указан user_id. А в классе Users нет $fillable, но есть $guarded в котором user_id не указан

БД PostgreSQL

Answer 1

Вдруг кому пригодиться. Мне подсказали сделать вот так и это действительной работает в моем случае.

public function store(Request $request)
{
    $user = $this->model::create($request->all());
    $arr = [];
    foreach ($request->all()['users_data'] as $el) {
        $arr[] = [
            'user_id' => $user->id,
            'usluga' =>'фытвлфоытволфыв'
        ];
    }
    $user->orders()->createMany($arr);
    return redirect($this->redirectTo);
}
READ ALSO
Как подмешать элементы в массив?

Как подмешать элементы в массив?

Есть два диапазона, например от 25 до 100 и от 100 до 200Минимум при этом равен 25, а максимум 200

106
APi получение данных через curl

APi получение данных через curl

Где ошибся и как получить данные? сейчас пишет страница недоступна

129
Как сохранить изображение? [дубликат]

Как сохранить изображение? [дубликат]

На данный вопрос уже ответили:

110
как сделать чтобы доступ к регистрации в dokuwiki был только с одной (например главной) страницы

как сделать чтобы доступ к регистрации в dokuwiki был только с одной (например главной) страницы

как сделать чтобы доступ к регистрации в dokuwiki был только с одной (например главной) страницы

108