有没有人对Laravel中的多态关系表现有任何经验?我需要有几个不同模型的设置表,这里的多态关系会很好,我想知道性能,是否每个模型都有自己的设置表一样好?
设置表很简单,这就是设置表的样子:
$table->increments('id');
$table->integer('foreign_id')->unsigned();
$table->string('key');
$table->string('value')->nullable();
我会删除每个模型设置所需的几个表,只是想知道使用多态设置是否会出现性能问题?
如果我决定使用多态,那么我会将这些类型添加到表中:
$table->string('has_settings_type');
$table->biginteger('has_settings_id')->unsigned();
laravel需要增加对多态关系的支持。
答案 0 :(得分:5)
只要您向表中添加正确的索引,性能就不会成为多态关系的问题。
但是,您的表缺少一个字段以使其具有多态性,您需要与该设置相关的模型名称。
render() {
let {animals} = this.state;
return (
<div>
{[...animals].sort((a,b) => {return a.age - b.age}).map((animal)=>{
return (<p key={animal.id}>{animal.type}</p>)
})}
</div>
)
}
答案 1 :(得分:1)
如果你使用的时间少于5.2.34
,那么就不会过多地关注多态关系。您可以阅读有关此问题的更多信息here。一个例子是如果images
是多态的,你做了:
->with('product.images.sources');
sources
不会急于加载。
答案 2 :(得分:1)
对 Jerodev 答案的改进。 索引顺序很重要。
通常你会想要搜索这样的东西
get all settings for a given model (foreign_object)
如果你保持这样的索引顺序(foreign_id,foreign_object),那么sql将无法使用索引来执行上述查询,因为索引中最左边的列不是foreign_object
因此索引应该是这样的
$table->index(['foreign_object', 'foreign_id']);
$table->index(['foreign_object', 'foreign_id', 'key']);