【问题标题】:Reading a nested array in laravel blade在 laravel 刀片中读取嵌套数组
【发布时间】:2015-03-17 20:16:30
【问题描述】:

我正在尝试读取嵌套数组并在刀片表中显示该值。

这是我在视图中看到的数据:

{
  "sub_issue_id": 2,
  "sub_issue": "Publick speaking",
  "sub_issue_desc": "This sub issue tracks the progress related to public speaking. ",
  "sub_issue_status": 1,
  "sub_issue_main_issue_id": 1,
  "sub_issue_user_id": 1,
  "created_at": "2015-01-18 13:45:34",
  "updated_at": "2015-01-18 13:45:34",
  "main_issue": [
    {
      "main_issue_id": 1,
      "main_issue": "Commuincations",
      "main_issue_desc": "This main task tracks progress on communications. ",
      "main_issue_status": 1,
      "main_issue_user_id": 1,
      "created_at": "2015-01-18 00:20:29",
      "updated_at": "2015-01-18 00:20:29"
    }
  ]
}
{
  "sub_issue_id": 3,
  "sub_issue": "Emails",
  "sub_issue_desc": "This subissue tracks the progress related to emails. ",
  "sub_issue_status": 1,
  "sub_issue_main_issue_id": 1,
  "sub_issue_user_id": 1,
  "created_at": "2015-01-18 13:51:48",
  "updated_at": "2015-01-18 13:51:48",
  "main_issue": [
    {
      "main_issue_id": 1,
      "main_issue": "Commuincations",
      "main_issue_desc": "This main task tracks progress on communications. ",
      "main_issue_status": 1,
      "main_issue_user_id": 1,
      "created_at": "2015-01-18 00:20:29",
      "updated_at": "2015-01-18 00:20:29"
    }
  ]
}

基本上我需要读取数组“main_issue”并显示“main_issue”属性的值(在上述数据“Communications”中)

以下是我尝试过的选项:

@foreach( $subIssues as $subIssue )
            {{ $subIssue }}
            <tr>
                {{--<td>{{ $subIssue->main_issue[0]->main_issue }}</td>--}}
                {{--<td>{{ $subIssue->main_issue->first()->main_issue }} </td>--}}
                {{--<td>{{ $subIssue->main_issue->firstRow->get(0)->main_issue }} </td>--}}

Here are the model & controller code..public function SubIssue()
    {
        return $this->belongsTo('App\Models\Issues\SubIssue', 'main_issue_id','sub_issue_main_issue_id'); /**
     * Relation between sub issue and main issue
     */
    public function MainIssue()
    {
        return $this->hasMany('App\Models\Issues\MainIssue', 'main_issue_id', 'sub_issue_main_issue_id');
    }
$mainIssues = $mainIssue->where('main_issue_user_id', $id)->get();
        //dd($mainIssues->toArray());
        return view('issues.mainIssues.mainIssues', compact('mainIssues'));
    }enter code here

【问题讨论】:

  • 你的数据是什么格式的?一个雄辩的模型?数组?你能发布你的模型和控制器代码吗?
  • 看起来你有JSON由于某种原因被发送,因为它发生在Eloquent模型和其他一些类有一个toJson方法,这是偶然调用的吗?数据来自哪里,它的预期状态是什么?
  • 是的..它是一个雄辩的模型..我正在使用紧凑功能来发送数据..
  • 这里是模型和控制器代码..public function SubIssue() { return $this->belongsTo('App\Models\Issues\SubIssue', 'main_issue_id','sub_issue_main_issue_id'); /** * 子问题和主问题的关系 */ public function MainIssue() { return $this->hasMany('App\Models\Issues\MainIssue', 'main_issue_id', 'sub_issue_main_issue_id'); $mainIssues = $mainIssue->where('main_issue_user_id', $id)->get(); //dd($mainIssues->toArray());返回视图('issues.mainIssues.mainIssues', compact('mainIssues')); }
  • 视图中的 $subIssues 变量从何而来?在您的代码示例中,您似乎只将 MainIssues 的集合传递给视图。

标签: arrays laravel nested blade


【解决方案1】:

尝试以下方法:

{{ $subIssue->MainIssue->main_issue }}

考虑使用驼峰命名法命名方法,这样可以使代码更易于阅读。上一行中的 MainIssue 是 SubIssue 类的 MainIssue() 函数,如果你像 Laravel 那样遵循 PSR-1,它应该是 mainIssue():http://www.php-fig.org/psr/psr-1/

另一个提示(来自个人经验):不要在所有字段名中重复表名。 $main_issue->name ($main_issue->status, ect) 比 main_issue->main_issue 更容易阅读。

编辑:看起来你的键在你的关系方法中被颠倒了。 Laravel docs 表示第二个参数是外键,第三个参数是本地键。 (尽管在一对一部分的一个示例中这些术语似乎混淆了)尝试以下方法-

//In SubIssue model
mainIssue()
{
    return $this->belongsTo('App\Models\Issues\MainIssue', 'sub_issue_main_issue_id', 'main_issue_id'); 
}

//In MainIssue model
public function subIssue()
{
    return $this->hasMany('App\Models\Issues\SubIssue', 'sub_issue_main_issue_id', 'main_issue_id');
}

我发现像 'sub_issue_main_issue_id' 这样的键很难遵循,如果你使用名为 'id' 的键作为主键,而使用名为 'table_name_id' 的键(例如 main_issue_id)作为外键,你可以利用 Laravel 的约定(您不必指定在关系中使用哪些键)。

另请注意:如果您使用自己的主键,请确保在模型中设置 $primaryKey 变量:

protected $primaryKey = 'main_issue_id';

【讨论】:

  • 感谢您抽出宝贵时间戴夫。我试过你的建议,它没有用。我会将方法名称更改为驼峰式。列中的表名名称的原因是,我在多个表中具有相同的列名,因此为了区分我采用了这种方法。
  • 我也有很多同名的列(在不同的表中),但我仍然发现在列中不包含表名要容易得多。实际上,我怀疑问题在于您对关系中外键和本地键的定义。我将再次阅读它们并编辑我的答案。
  • 这对我有用。我有 {{$log->project->name}} ,其中 name 在数组中。
猜你喜欢
  • 2021-01-20
  • 2017-01-10
  • 1970-01-01
  • 2014-08-09
  • 2020-04-10
  • 2021-05-17
  • 1970-01-01
  • 1970-01-01
  • 2023-02-06
相关资源
最近更新 更多