将 for 循环的结果附加到 Laravel 中的 eloquent 输出

Posted

技术标签:

【中文标题】将 for 循环的结果附加到 Laravel 中的 eloquent 输出【英文标题】:Attach result of for loop to eloquent output in Laravel 【发布时间】:2021-08-28 14:03:07 【问题描述】:

美好的一天。就像我在这篇文章Using Query Builder and mysql to get categories and sub - categories 中解释的那样,我想从这张表中做出一些有意义的事情。我决定走 Eloquent 的方式。我能够得到不同的类别,如下所示。我如何遍历属于特定类别的每个标题? 例如,以如下形式获取:

CatA

Title 1
Title 5

猫B

Title 2
Title 3
Title 4

我的代码如下所示

public function type(Request $request)
    
    $details = [];

    $categories = Category::distinct()->get(['category']); //Get the distinct categories from the category column in the table


    foreach($categories as $category)
      $titles = Category::where('type',$category->type);
      $details = ['cat'=>$category->type,[
          'title' => $titles->title,
          'pk' => $titles->pk
      ]];
    

    return response()->json([
         "Data" => $details
    ]);

没有得到结果。请问有没有更好的方法可以做到这一点?

【问题讨论】:

我会使用两个模型 CategoryTitle。否则你的模型会有点混乱。 您使用显示的代码得到什么结果?看来你需要的是一个 gruopBy 【参考方案1】:

您可以与帖子和类别建立多对多关系。然后获取所有类别的帖子。

例子:

$categories = Category::with('posts')->all();

然后您可以循环浏览类别和帖子

foreach($categories as $category)
   foreach($category->posts as $post)
      echo $post->title;
   

文档:https://laravel.com/docs/8.x/eloquent-relationships#many-to-many

【讨论】:

谢谢。我试过这个,但它不起作用,因为类别必须首先是不同的。 $categories = Category::with('posts')->distinct()->get(['type']);正在为帖子返回一个空数组 $categories = Category::with('posts')->distinct()->get(['type']);正在为帖子返回一个空数组

以上是关于将 for 循环的结果附加到 Laravel 中的 eloquent 输出的主要内容,如果未能解决你的问题,请参考以下文章

For循环正在覆盖列表中的字典值[重复]

如何将 for 循环中的 .pkl 文件附加到 for 循环中创建的 pandas 数据帧?

从for循环将系列附加到dict或list或dataframe?

Pandas 将浮点数附加到 for 循环中的列

如何将行附加到现有的 SYS_REFCURSOR?

循环 LINQ 查询并将结果附加到 DataTable