php - 在 Laravel 构造函数中将模型链接到父级

标签 php laravel eloquent

也许我搜索的全错,但我一直无法找到答案。假设我有一个模型建筑,它总是有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/

相关文章:

php - Laravel Order By 关系计数,但关系中的属性是特定的

php - 无法使用 PHP/PDO 在 mySQL DB 上更新/插入

php - 如何限制我的 Php 列表显示的行数

php - 以所见即所得方式检查键入字符的长度

php - Laravel 尝试选择属于关系列

php - 对字符串调用成员函数 addEagerConstraints()

php - Laravel 5.3 - 登录尝试重定向失败

php - simplexml_load_file() : I/O warning : failed to load external entity &quot;/user-bundle/Resources/config/doctrine/model/User. orm.xml

laravel - 在非对象上调用成员函数 associate()

laravel - 在 Eloquent 中软删除多对多关系的主元