也许我搜索的全错,但我一直无法找到答案。假设我有一个模型建筑,它总是有n层楼
我想为 Building 编写一个构造函数,在其中我可以指定要创建的楼层数。问题是我无法将楼层链接回建筑物,因为当调用建筑物的构造函数时,它还没有主键......
基本上,我的代码看起来像这样,但不起作用:
class Building extends Model {
public function __construct($nbFloors) {
for($i=0; $i<$nbFloors; $i++) {
$foo = new Floor();
$foo->building_id = $this->id;
$foo->save();
}
}
}
实现类似目标的正确解决方案是什么?
最佳答案
主键在构造函数中永远不可用,并且构造函数的定义与需要属性数组作为第一个参数的模型不兼容。
您在构造函数中执行了太多逻辑,构造函数仅用于实例化对象及其依赖项,而不是执行业务逻辑。通过在构造函数中执行此操作,您实际上将在每次实例化模型时尝试创建新楼层,包括从数据库检索模型时。
我建议添加一个新方法,例如:
public function createWithFloors($n) {
$this->save();
...
}
现在,您可以按预期使用模型并调用创建方法:
$building = new Building(['name' => 'Empire State']);
$building->createWithFloors(102);
关于php - 在 Laravel 构造函数中将模型链接到父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51636741/