2017-07-06 70 views
1

我有这样的关系模型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); 

它的工作原理,但它是一个很大的混乱。有更容易的方法吗?

+0

你的问题解决了我的问题,“如何复制文件模型”。对不起,没有帮助你的问题,但感谢你的代码如何做到这一点。 –

回答

0

也许解决方案可以与行为。扩展\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; 
} 
0

有没有更简单的方法,您的解决方案是存储在物理复制磁盘上已经存储的文件和记录一个新\System\Models\File的正确方法在这个副本的数据库中。

相关问题