我有下一个数据结构:
有用户表用户。 每个用户可以有4种类型的文件。
是否可以将其保存在表格结构中:文件?
id | user_id | type1 | type2 | type3 | type4
还可以使用类似下一个的代码吗?
$user->files($type, $value);
答案 0 :(得分:1)
我以下一种方式解决此问题
<强> migration_file.php 强>
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class ImplementFilesStorage extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->integer(['files_id'])->unsigned();
});
Schema::create('files', function (Blueprint $table) {
$table->increments('id');
$table->string('id_file')->nullable();
$table->string('bill_file')->nullable();
$table->string('card_back_file')->nullable();
$table->string('card_front_file')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('manager_files');
Schema::table('users', function (Blueprint $table) {
$table->dropColumn(['files_id']);
});
}
}
<强> user.php的强>
class User extends EloquentUser {
protected $table = 'users';
public function files()
{
return $this->hasOne('App\File', 'files_id');
}
}
<强> File.php 强>
class File extends Model
{
protected $table = 'files';
public function user()
{
return $this->belongsTo('App\User', 'files_id');
}
public function type($type, $filename = '')
{
$field_name = $type . '_file';
if ($filename) {
$this->{$field_name} = $filename;
}
return $this->{$field_name};
}
}
现在,为了阅读价值观,我使用$user->files->type($type_name)
进行写作
$user->files->type($type_name, $stored_value)
。
注意:在我们需要调用$user->files->save();
的所有操作后保存文件表中的更改。
如果您有关于不方便使用ORM的通知,请通知我。
P.S:实际上我解决了相当困难的任务。可能稍后我会在我的博客上发布它并提供链接。