OctoberCms。如何向Model添加属性?

时间:2018-01-08 05:14:59

标签: php laravel octobercms

我需要通过parrent模型ID显示列表子模型: 如果我在模型中使用它,它的工作原理:

public function getIdAttribute($id)
{
  $sales = Sale::where('category_id',$id)->get();

    foreach ($sales as $sale) {
        $clean_fields[$sale->attributes['id']]['name'] = $sale->attributes['name'];
        $clean_fields[$sale->attributes['id']]['price'] = $sale->attributes['price'];
    }

    return $clean_fields;
}

在模板中显示列表:

{% for service in servicesList %}

   <h1>{{service.name}}</h1>
   <ul class="children_list">
     {% for children in service.id %}
       <li>{{children.name}}</li>
     {% endfor %}
   <ul>

{% endfor %}

我将属性id修改为数组。它在模板中工作,但在后端我有错误,因为id没有传递给列表控制器。我如何在组件模板中获取子模型?

2 个答案:

答案 0 :(得分:2)

我假设你有2个模特Service(父母)和Sale(它的孩子)

  

我还假设从template for loop开始,它是hasMany关系(其中service有很多sale的记录)

其中Sale的父级category_idid

所以在父模型中你可以定义关系

class Service extends Model
{
    public $hasMany = [
        'sales' => ['Acme\Blog\Models\Sale', 'key' => 'category_id']
        // here you need to add proper namespace for your model
    ];
}

现在,当您需要获取Sale的相对记录时,您可以将此关系称为别名sales

我们假设我们从组件传递servicesList

public function onRun()
{
    $this->page['servicesList'] = Service::all();
}

现在在页面内部,您可以编写类似这样的内容,因为servicesList将可用于页面(其Service模型的集合

{% for service in servicesList %}    
   <h1>{{service.name}}</h1>
   <ul class="children_list">
     {% for children in service.sales %} 
       <!-- its relation name 'service.sales' which we defined in model -->
       <li>{{children.name}}</li>
     {% endfor %}
   <ul>    
{% endfor %}

如果您有任何疑问,请在评论中告诉我。

答案 1 :(得分:0)

为您的模型添加适当的关系

$("#btn-group-agent-upload").on("click", function () {

    var file = $("#group-agent-file").val();

    test(file);

});
然后你让孩子们做你想做的事情

 public function children()
{
    return $this->hasMany(Sale::class,'category_id','id');
}