我不知道这是否可能,但基本上我想要的是当我保存()一个对象和列没有找到,它应该自动添加到表。
例如:$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.Pid
与Meta.ID
相关,因此这意味着:元aaa
有3个额外的字段命名为field 1
, field 2
和field 3
。元bbb
只有两个额外的字段field 1
和field 2
。因此,现在只需在fields
表中创建一条新记录,而不是为Meta
表中的字段添加新列。