【问题标题】:Retrieving data from belongsToMany relationship in Laravel从 Laravel 中的 belongsToMany 关系中检索数据
【发布时间】:2016-06-02 08:22:18
【问题描述】:

我在从我的关系中获取数据时遇到了一些问题。我需要一些域的标签。

$domains = Domains::where('customer_id', Auth::user()->customers_id)->get();

有我需要的所有域。在我的 Domains 模型上,我与数据透视表有这个 belongsToMany 关系。

public function tags() { 
    return $this->belongsToMany('App\Models\Tags_Domains', 'domain_tag', 'domains_id', 'tags_id'); 
}

我能够从我与此的关系中获取所有数据:

dd($domains[0]->tags);

这为我提供了我想要的所有数据,但仅限于第一个域。但我希望每个域都使用这个,将这个新数组传递给我的 Blade 模板。我尝试了很多东西,但无法让它发挥作用。 ($collection 错误,试图正确获取非对象...)

有人可以帮我吗?


控制器代码:

    $domains = Domains::where('customer_id', Auth::user()->customers_id)->get();
    return view('defaultLayout.domains.tagsdelete', [
        'domains' => $domains
    ]);

【问题讨论】:

  • 为什么您不只是将$domains 发送到您的刀片服务器,然后为每个域显示相关标签? @foreach($domains as $domain) $domain->tags @endforeach
  • 因为我得到了这个:未定义的属性:Illuminate\Database\Eloquent\Collection::$tags
  • 向我们展示您的控制器代码。
  • 我已经用我的控制器代码更新了我的问题
  • 我已经更新了我的答案。希望对您有所帮助。

标签: laravel pivot has-and-belongs-to-many


【解决方案1】:

这是因为您使用 $domains[0] 并获得了第一个域。 你必须遍历它们:

foreach($domains as $domain) {
    foreach($domain->tags as $tag) {
        var_dump($tag);
    }
}

编辑: 如果您需要视图中的标签,方法如下:

@foreach($domains as $domain)
     <p>{{ $domain->name }}</p> //where name could be any field that $domain has
     @foreach($domain->tags as $tag)
     <p>{{ $tag->name }}</p> //where name could be any field that $tag has
     @endforeach
@endforeach

很高兴我有帮助:)

【讨论】:

  • 我想将标签名称、标签 ID 和域名传递给我的视图。 -- 我的控制器代码在我的问题中,但在我看来我还没有做任何事情。到目前为止,您的代码有效,但我需要将数据保存在一个数组中并传递该数组。在我的 foreach 之外,我只得到一个数据字符串。如果我在循环中使用 var_dump $tag ,则并非如此
  • 是的,我在您的新更新中也完全按照您的方式进行操作 :) 完美。我还是laravel的新手,感谢您的支持! :)
猜你喜欢
  • 1970-01-01
  • 2019-12-11
  • 2022-07-27
  • 2018-05-19
  • 2020-08-23
  • 2018-09-15
  • 1970-01-01
  • 2020-08-20
  • 2018-09-01
相关资源
最近更新 更多