复制另一个模型文件附件十月CMS
我有这样的关系模型User
:复制另一个模型文件附件十月CMS
public $attachMany = [
'logos' => ['System\Models\File', 'delete' => true]
];
public $hasMany = [
'jobs' => ['Acme\Plugin\Models\Job']
];
我也有在Job
模型如下关系:
public $attachOne = [
'logo' => ['System\Models\File', 'delete' => true]
];
所以,一User
可以附加大量徽标,当用户创建Job
时,他们可以附加一个徽标。
当User
创建Job
并附加一个标志吧,我需要他们能够选择连接已经连接到User
的标志之一,但我不希望它是实际的关系(即:不是多对多的关系),而是完全重复的File
,以便如果用户稍后决定在以后的日期删除他们的一些徽标,它不会影响附加的徽标工作。
我理论上已经解决了这个问题,并回答了我自己的问题,但它非常混乱,我不禁想到可能有一个更简单的方法。
// Get the File model
$chosenLogo = \System\Models\File::find(1);
// Save the contents of the file to local storage
Storage::disk('local')->put('tempLogos/' . $chosenLogo->disk_name, $chosenLogo->getContents());
// Get the job
$job = \Acme\Plugin\Models\Job::find(34);
// Create a new File and specify path for data
$file = new \System\Models\File;
$file->data = base_path('storage/app/tempLogos/' . $chosenLogo->disk_name);
// Save file then attach logo to job
$file->save();
$job->logo()->add($file);
它的工作原理,但它是一个很大的混乱。有更容易的方法吗?
尝试使用MorphTo关系:https://octobercms.com/docs/database/relations#polymorphic-relations 您可以创建Logo模型并将其变形为User和Job模型。
谢谢,但我的问题是关于如何在10月CMS中复制文件附件(https://octobercms.com/docs/database/attachments),这意味着关系和物理存储在本地或云文件系统上的文件。如果不明确,道歉。 – Joseph
也许解决方案可以与行为。扩展\System\Models\File
类与clone()
或copy()
方法,用这样的:
public static function clone(){
Storage::disk('local')->put('temp/' . $this->disk_name, $this->getContents());
// Create a new File and specify path for data
$file = new \System\Models\File;
$file->data = base_path('storage/app/temp/' . $this->disk_name);
// Save file then attach logo to job
$file->save();
return $file;
}
有没有更简单的方法,您的解决方案是存储在物理复制磁盘上已经存储的文件和记录一个新\System\Models\File
的正确方法在这个副本的数据库中。
你的问题解决了我的问题,“如何复制文件模型”。对不起,没有帮助你的问题,但感谢你的代码如何做到这一点。 –