Как использовать мягкое удаление по отношению к принадлежности? - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь реализовать отношение belongsTo с областью действия ->withTrashed() непосредственно на нем.

Это мягкая удаленная модель:


<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class ContractType extends Model
{
    use SoftDeletes;
}

Это модель, пытающаяся получить доступ к типам контрактов:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Employee extends Model
{
    protected $fillable = [
        'contract_type_id',
        'name'
    ];

    public function contract_type()
    {
        return $this->belongsTo(ContractType::class);
    }

    public function contract_type_with_trashed()
    {
        return $this->belongsTo(ContractType::class)->withTrashed();
    }
}

Вот что я получаю, когда запрашиваю следующие отношения:

$employee = Employee::first(); // has a contract_type_id of 1
dd($employee->contract_type, $employee->contract_type_with_trashed);

/*
ContractType {#722 ▼
  #dates: array:2 [▶]
  #connection: "mysql"
  #table: "contract_types"
  #primaryKey: "id"
  #keyType: "int"
  +incrementing: true
  #with: []
  #withCount: []
  #perPage: 15
  +exists: true
  +wasRecentlyCreated: false
  #attributes: array:7 [▶]
  #original: array:7 [▶]
  #changes: []
  #casts: []
  #dateFormat: null
  #appends: []
  #dispatchesEvents: []
  #observables: []
  #relations: []
  #touches: []
  +timestamps: true
  #hidden: []
  #visible: []
  #fillable: []
  #guarded: array:1 [▶]
  #forceDeleting: false
}
null
*/

Нет ContractType фактически удалено, а в таблице contract_types есть столбец deleted_at.

Как мне заставить это работать?

[EDIT]

Это таблица миграции contract_types:

Schema::create('contract_types', function (Blueprint $table) {
    $table->tinyIncrements('id');
    $table->string('name');
    $table->timestamps();
    $table->softDeletes();
});

И таблица миграции employees:

Schema::create('employees', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->unsignedTinyInteger('contract_type_id');
    $table->string('name');
    $table->timestamps();

    $table->foreign('contract_type_id')->references('id')->on('contract_types')->onDelete('cascade');
);

В результате у меня есть столбец deleted_at, как и ожидалось. Я мог бы добавить, что выполнение $employee->contract_type()->withTrashed()->get() работает хорошо, но когда оно находится внутри отношений, оно не работает.

...