Я пытаюсь реализовать отношение 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()
работает хорошо, но когда оно находится внутри отношений, оно не работает.