Вы идете в правильном направлении.
Вы можете иметь users
и companies
внешний ключ в вашей таблице files
.
Посмотрите в Laravel 5 Полиморфные отношения.
https://laravel.com/docs/5.7/eloquent-relationships#polymorphic-relations
Вы можете иметь внешний ключ fileable_id
и тип внешнего ключа fileable_type
если вы добавите файл для companies
record
Пусть, скажем, идентификатор вашей компании равен 24, а используемая модель - App\Models\Company
Добавить следующее к вашей файловой модели App\File
public function fileableable()
{
return $this->morphTo();
}
И следуя вашим App\User
и App\Company
public function files()
{
return $this->morphMany('App\Comment', 'fileable'); // use morphOne if you want One to One relation
}
Для создания файла для Company .
$company = Company::find(24);
$company->files()->create([
'path' => '/folder/myfile.txt',
'size' => '14585',
'extension' => 'txt',
]);
На этом этапе вы можете получить MassAssignmentException
внутри вашей App\File
модели
добавить $fillable = ['path', 'size' , 'extension'];
Ваша запись будет выглядеть так:
id path size extension fileable_id fileable_type
1 /folder/myfile.txt 14585 txt 24 App\Models\Company
Laravel автоматически сохраняет значения fileable_id
и fileable_type
, судя по объекту, вызывающему метод отношений. Вам не нужно ставить их вручную
Подсказка: всегда просматривайте официальные документы