Laravel使用save()创建不存在的列


Laravel make column if doesn't exist using save()

我不知道这是否可能,但基本上我想要的是当我保存()一个对象和列没有找到,它应该自动添加到表。

例如:

$information = new App'Information;
$meta = new App'Meta;
//Insert real info for $information
$information->save();
$meta->description = "random description" //This is an existing column
$meta->newColumn = "Random string" //This column doesn't exist
$information->meta()->save($meta);

所以我想让它做的是在表Meta中创建列"newColumn"因为它不存在。

有没有一种方法可以在不创建新迁移的情况下做到这一点?

编辑:我想我已经找到了一种我认为是最好的方法。

if (!Schema::hasColumn('meta', 'newColumn')){
  Schema::Table('meta',function($table){
    $table->string('newColumn');
  });
}

如果有人有更好的解决方案。请随意添加

最后的编辑:

感谢大家的输入和帮助,但我们已经设计了一个新的数据库表,允许我们动态地添加新的数据,因为我们喜欢。还是谢谢你的努力:)

我认为动态表设计是一个坏主意。为什么不创建一个新表,例如fields,列为

ID | Pid | FieldName | Content

,其中ID是一个增量数字,Pid是实际使用的meta表中保存的记录的ID。

例子

Meta表:

ID | Description | StaticField1 | StaticField2
----------------------------------------------
1  | aaa         | a1           | a2
2  | bbb         | b1           | b2
3  | ccc         | c1           | c2
4  | ddd         | d1           | d2

Fields table:

ID | Pid | FieldName | Content
------------------------------
1  | 1   | field 1   | content 1
2  | 1   | field 2   | content 2
3  | 1   | field 3   | content 3
4  | 2   | field 1   | content 4
5  | 2   | field 2   | content 5

Fields.PidMeta.ID相关,因此这意味着:元aaa有3个额外的字段命名为field 1, field 2field 3。元bbb只有两个额外的字段field 1field 2。因此,现在只需在fields表中创建一条新记录,而不是为Meta表中的字段添加新列。