【问题标题】:Creating a new Laravel 4 model class with a string variable使用字符串变量创建一个新的 Laravel 4 模型类
【发布时间】:2014-04-11 17:51:40
【问题描述】:

TL;DR 已经走到了尽头。

我有很多 belongsTo() 模型可以有任意数量的记录,我正在尝试将它们绑定到一个编辑表单。我有以下创建表单元素的 foreach:

@foreach ($department->department_10 as $key => $value)
    {{ Form::select(
        'department_10['.(isset($value->pk_department_10)?$value->pk_department_10:0).']',
        $department_10_opts,
        (isset($value->department_10)?$value->department_10:''),
        array('class'=>'form-control input-md department_10', 'placeholder'=>'Other Types of Service')) }}
@endforeach

由于可以有 0 条记录(行?)属于模型,为了简化我的 @foreach,我想创建模型的“空白”实例。此外,因为我将不得不处理大约 70 个这样的案例,所以我创建了一个函数来创建新的空白模型。这是功能(在我的控制器中没有更好的地方):

function mkBlankModel($parentModel, $newModel){
    if(count($parentModel->$newModel) === 0){
        $parentModel->$newModel[0] = new $newModel();
        $parentModel->$newModel[0]->fk_department = $parentModel->pk_department;
        $parentModel->$newModel[0]->$newModel = '';
    }
    return $parentModel;
}

当我运行它时,我没有收到任何错误,但我确实得到了意想不到的结果,我无法真正理解它们:

测试步骤 1) 在加载具有 2 个部门_10 的记录时查看编辑页面。它按预期工作;正确加载两个字段。

测试步骤 2) 在加载具有 0 个部门_10 的记录时查看编辑页面。页面加载但没有任何字段。因为显然我的功能不起作用,所以我通过转储dump($department->$department_10) 进行验证并确认了这一点。

测试步骤 3)我将 $parentModel->$newModel[0] 替换为 $parentModel->department_10[0],如下所示:

function mkBlankModel($parentModel, $newModel){
if(count($parentModel->$newModel) === 0){
    $parentModel->department_10[0] = new $newModel();
    $parentModel->department_10[0]->fk_department = $parentModel->pk_department;
    $parentModel->department_10[0]->$newModel = '';
}
return $parentModel;
}

两种情况(有记录和没有记录)都可以正常工作。所以我的问题可能不是 Laravel 特有的,但我只是很好奇如何实现这一点。

TL;DR:

我正在尝试为父模型创建一个模型实例,如果不存在,那么我的@foreach 循环将在我的edit.blade.php's 表单中创建一个空白字段。如果我在创建模型时手动拼出模型的名称,我可以做到这一点,但由于我会经常这样做,我更愿意定义类,并用字符串填充它。

【问题讨论】:

    标签: php class model laravel laravel-4


    【解决方案1】:

    所以我想通了;我需要将 $newModel 用大括号括起来:

    function mkBlankModel($parentModel, $newModel){
        if(count($parentModel->$newModel) === 0){
            $parentModel->{$newModel}[0] = new $newModel();
            $parentModel->{$newModel}[0]->fk_department = $parentModel->pk_department;
            $parentModel->{$newModel}[0]->$newModel = '';
        }
        return $parentModel;
    }
    

    更多信息在这里:http://php.net/manual/en/language.types.string.php#language.types.string.parsing.complex

    【讨论】:

      猜你喜欢
      • 2017-01-09
      • 2022-11-24
      • 2022-01-05
      • 2014-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-28
      相关资源
      最近更新 更多