Сохраните модель и верните ее отношения - PullRequest
0 голосов
/ 19 июня 2020

В моей кодовой базе у меня есть модель актива и модель технологии,

Модель актива может быть изменена,

public function assetable() {
    return $this->morphToMany();
}

И технологическая модель тоже с этим связана,

public function asset() {
    return $this->morphOne(Asset::class, 'assetable');
}

В моем контроллере я делаю следующее:

public function create(Request $request) {

    //Do validation

    \DB::beginTransaction();

    try {
        $technology = Technology::create([
            'technology' => $request->name,
            'type' => 'payment'
        ]);
    } catch(\Exception $e) {
        \DB::rollback();
        throw($e);
    }

    try {
        //update the already uploaded asset so it relates to the newly created Technology
        $assets = Asset::whereIn('id', $request->uploadedFile)->update([
            'assetable_id' => $technology->id,
            'assetable_type' => 'App\Payment'
        ]);
    } catch(\Exception $e) {
        \DB::rollback();
        throw($e);
    }

    \DB::commit();
    return response(['technology' => $technology->load('asset')], 201);
}

Я хочу вернуть новый созданный актив Technology с отношением актива как часть результата, но он возвращается как null,

Что я делаю не так? Разве мне не нужно запрашивать базу данных?

1 Ответ

0 голосов
/ 19 июня 2020

установить связь в технологии модели. php

public function asset(){
   $this->hasMany(Asset::class)
}

и установить связь в модели актива. php

public function technology(){
   $this->belongsTo(Technology::class)
}

в контроллере

public function create(Request $request) {

    //Do validation

    \DB::beginTransaction();

    try {
        $technology = Technology::create([
            'technology' => $request->name,
            'type' => 'payment'
        ]);

        //update the already uploaded asset so it relates to the newly created Technology
        $assets = Asset::whereIn('id', $request->uploadedFile)->update([
            'assetable_id' => $technology->id,
            'assetable_type' => 'App\Payment'
        ]);

    } catch(\Exception $e) {
        \DB::rollback();
        throw($e);
    }

    \DB::commit();
    return response(['technology' => $technology->asset], 201);
}
...